0
$data = $mysqli->prepare("SELECT amount FROM items WHERE id=:id");
echo 'forward1';
if(!$data->execute(array(':id' => $id)))
    die("error executing".$data->error);
echo '2';
$row = $data->fetch_object();
die('Losing my mind'.$row->amount);

これは「forward1」のみをエコーし​​、「errorexecute...」または「2」はエコーしません。* $ mysqli-> query "で動作します。クエリの:idに引用符''を追加すると、「forward1errorexecuteing」がエコーされます。

4

2 に答える 2

1

まず、プリペアドステートメントの構文と作業モデルを理解していることを確認してください。

のように:

$data = $mysqli->prepare("SELECT amount FROM items WHERE id=(?)");
            // THIS ^^ actually "prepares" an object to be used in the statement
$data->bind_param("i",$id)
            // ...then you "bind" the parameter for your statement as "i"(nteger)
echo 'forward1';
if(!$data->execute())  // And now you simply run it, with no other args
    die("error executing".$data->error);
echo '2';
$row = $data->fetch_object();
die('Loosing my mind'.$row->amount);

私はもっ​​と似たようなものを使うことを提案します

$data->execute() or die("error executing".$data->error);

プリペアドステートメントの主な手順は次のとおりです。1。いくつかのプレースホルダー値を使用してクエリを準備します。2.必要な数の値をクエリに「バインド」します。3.実行してください!

このような単純なクエリでは、なぜこれがあなたのケースに関連するのかわかりません。私はまた、あなたが実際にもっと大きな何かのためにそれを必要としていると思います。あなたのポイントやコードサンプルを誤解した場合はお知らせください。

ああ、そして..楽しんでください!:-)

于 2012-04-01T21:58:15.833 に答える
0

エラー報告をオンにします。

execute準備が失敗した後、mysqli :: statementのメソッドにアクセスすると、致命的なエラーが発生します。$data === falseを呼び出す前に確認してくださいexecute

エラーメッセージ:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':id' at line 1

このエラーがトリガーされる理由については、次の回答を参照してください:MYSQLI :: prepare()、使用時のエラープレースホルダー:something

mysqliの使用方法については、 PHPマニュアルを参照するか、代わりにPDOを使用してください。

于 2012-04-01T21:31:07.713 に答える