mysqlを持つ古いPHPコードがあります。PHP mysqli_fetch_assocが正しい値を返さない
SELECTステートメントから配列を取得し、それをプロパティとしてJSONオブジェクトに追加し、エンコードされたJSONをエコーします。
mysqliを使うために変更しましたが、行を取得しようとしたときに配列を作成しようとすると、何も返されません。
$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;
バージョン1:
$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
}
バージョン2:ここで私は書き込みをしようとした新しいものだ、私が試した二つ目、1行のみを返します。
ここで、古いMySQLのコードです
バージョン3:または私はこのようなmysql構造を完全にミラーリングしようとしました:
JSONへの結果の配列をラップ$sql = "SELECT ...";
$query = mysqli_query($con, $sql);
$results = array();
while($row = mysqli_fetch_assoc($query))
{
$results[] = $row;
}
return $results;
:mysqliのバージョンの
$obj = new stdClass();
$obj->Data = $results;
$obj->ErrorMessage = '';
die(json_encode($obj)); //or echo json_encode($obj);
どれも機能していないので、私はこれらの配列が作成されている方法で、重要な変更がある場合があります考えていました。
最初のmysqliの例で何が間違っているかに関するヒントを教えてください。
バージョン2では、SQL接続が存在し、少なくとも行を選択できることがわかります。しかし、明らかにそれが返すよりも1行だけです。それは私が配列を構築することは、問題の原因であることを、と思わせる、またはそれは...
LATER EDIT JSONオブジェクトに関するだ: OK!実用的な解決策を見つけました。
また、私はデータで周りを回って、小さなチャンクを選んで突然動いた。これからの教訓:関数は40行または5行に対して同じように応答していません。それはphp.iniの設定と関係がありますか?あるいは、選択に不正な文字がある可能性がありますか? 'Note'列の長さ(DBから)が長すぎて配列が処理できないことがありますか?
データベースからいくつかの行を選択して配列に配置し、その配列を最後にJSONにエンコードされたオブジェクトに配置し、隣にステータスメッセージを付けます。改善することができますが、これはデモ用です。
$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));
質問です:どのように私は(そのような場合)、配列のサイズに関する問題/不正な文字を克服することができますか?
:あなたのコードでは、プリペアドステートメントを使用して、このように見えるでしょうか?正しく接続されていますか?あなたのSELECTクエリは何ですか、あなたはそれが動作していることを知っていますか? – Qirel
こんにちは! $ conは接続ハンドラであり、この点に達すると動作します。私はそれを印刷しようとし、それをMYSQLのワークベンチに貼り付けるので、SELECTも機能します。 – Laureant
mysqli_error()はどこにありますか?あなたは何を得ているのですか? – user3526204