Ich habe einen alten PHP-Code, der mysql enthält.PHP mysqli_fetch_assoc nicht tun korrekte Wert zurück
Er ruft ein Array aus einer SELECT-Anweisung ab, fügt es zu einem JSON-Objekt als Eigenschaft hinzu und gibt das codierte JSON wieder.
Ich habe es geändert, um mysqli zu verwenden, aber wenn ich versuche, die Zeilen zu erhalten und ein Array daraus zu erstellen, gibt es nichts zurück.
Hier ist der alte MySQL-Code:
$con = mysql_connect('host','account','password');
if (!$con)
{
//log my error
};
mysql_select_db("database_name", $con);
mysql_set_charset('utf8');
$sql = "SELECT field1 as Field1, field2 as Field2 from table where ID = '".$parameter."'";
$query = mysql_query($sql);
$results = array();
while($row = mysql_fetch_assoc($query))
{
$results[] = $row;
}
return $results;
Version1: Hier ist die neue, die ich mit dem Schreiben versucht:
$con = mysqli_connect('host','account','password','database_name');
$sql = "SELECT field1 as Field1, field2 as Field2 from table where ID = '".$parameter."'";
$results = array();
if($result=mysqli_query($con, $sql))
{
while ($row=mysqli_fetch_assoc($result))
{
$results[] = $row;
}
return $results;
}
else
{
//error
}
Version2: Zweite, was ich versuchte, die nur 1 Zeile zurückgibt:
...same as above until $sql
if($result=mysqli_query($con,$sql))
{
$row=mysqli_fetch_assoc($result);
return $row;
}
Version3: Oder ich habe versucht, die mysql-Struktur wie folgt komplett zu spiegeln:
$sql = "SELECT ...";
$query = mysqli_query($con, $sql);
$results = array();
while($row = mysqli_fetch_assoc($query))
{
$results[] = $row;
}
return $results;
Wrapping die resultierende Array in das JSON:
$obj = new stdClass();
$obj->Data = $results;
$obj->ErrorMessage = '';
die(json_encode($obj)); //or echo json_encode($obj);
Keine der mysqli-Version arbeiten, so dass ich dachte, es könnte diese Arrays erstellt eine wichtige Änderung in der Art und Weise sein.
Irgendwelche Tipps, was am ersten mysqli-Beispiel falsch sein könnte?
Mit Version2 kann ich sagen, dass die SQL-Verbindung da ist, und ich kann zumindest eine Zeile auswählen. Aber es ist offensichtlich nur eine Zeile, als es zurückgibt. Es macht mich denken, dass die Anordnung der Quelle des Problems ist, den Aufbau, oder es ist in Bezug auf das JSON-Objekt ...
SPÄTER EDIT: OK! Eine funktionierende Lösung gefunden.
AUCH, spielte ich mit den Daten herum, wählte einen kleineren Brocken, und es funktionierte plötzlich. Lektion daraus: Die Funktion reagiert nicht auf die gleiche Weise für 40 Zeilen oder für 5 Zeilen. Hat es etwas mit einer php.ini Einstellung zu tun? Oder könnte es illegale Charaktere in der Auswahl geben? Könnte es sein, dass die Länge einer "Note" -Spalte (von der db) zu lang ist, als dass das Array es könnte?
Hier ist der Arbeitsabschnitt des Codes, der einige Zeilen aus der Datenbank auswählt, sie in ein Array einfügt und dann dieses Array in ein Objekt einfügt, das am Ende in JSON kodiert ist, mit einer Statusmeldung daneben. Könnte verbessert werden, aber das ist nur für Demo.
$con = mysqli_connect('host','username','password','database_name');
if (!$con)
{
$errorMessage = 'SQL connection error: '.$con->connect_error;
//log or do whatever.
};
$sql = "SELECT Field1 as FieldA, field2 as FieldB, ... from Table where ID='something'";
$results = array();
if($result = mysqli_query($con, $sql))
{
while($row = mysqli_fetch_assoc($result))
{
$results[] = $row;
}
}
else
{
//log if it failed for some reason
die();
}
$obj->Data = $results;
$obj->Error = '';
die(json_encode($obj));
Frage ist: Wie kann ich das Problem in Bezug auf die Größe des Arrays/ungültige Zeichen überwinden (wenn das der Fall ist)?
Wo sehen Sie '$ con' definieren? Ist es richtig verbunden? Was ist deine SELECT-Abfrage? Weißt du, dass das funktioniert? – Qirel
Hallo! $ con ist der Verbindungshandler, und es funktioniert, wenn es zu diesem Punkt kommt. Das SELECT funktioniert auch, weil ich es ausprobiert habe und es dann in die MYSQL-Workbench eingefügt habe, und es scheint zu funktionieren. – Laureant
Und wo ist dein mysqli_error()? Was ist der Fehler, den Sie bekommen? – user3526204