whileループのエラーを引き起こしてプリペアドステートメント
質問
私は正常に動作する必要があり、次の簡単なmysqliのPHPのアプリケーションを、持っています。 $ pkが完全に受け入れられ、有効ARTICLE_NOある、とMySQLで直接実行時にクエリが完璧に動作しています。私はすべてのイベントの後、すべての実行中tetsing以外の出力文を入れています。 whileループは、入力されることはありません、と私はなぜわかりませんよ。
編集:私は0行が返されているという事実にまで問題を縮小しているが、私はphpmyadminの中に同じクエリが正しい結果を与える理由としてはわかりません。
。EDIT2:私はwhileループを取り除くと、取得した場合だけ持っている。
if (!$getRecords->fetch()) {
printf("<p>ErrorNumber: %d\n", $getRecords->errno);
}
これは、エラー番号が0だから、レコードがフェッチされず、エラーがない、まだそれは有効なクエリであることを示しています。
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
$pk = $_GET["pk"];
$con = mysqli_connect("localhost", "", "", "");
if (!$con) {
echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
exit;
}
$con->set_charset("utf8");
echo "test outside loop";
if(1 < 2) {
echo "test inside loop";
$query1 = 'SELECT ARTICLE_NO FROM AUCTIONS WHERE ARTICLE_NO = ?';
if ($getRecords = $con->prepare($query1)) {
echo "inside second loop";
$getRecords->bind_param("i", $pk);
echo "test after bind param";
$getRecords->execute();
echo "test after bind execute";
$getRecords->bind_result($ARTICLE_NO);
echo "test after bind result";
while ($getRecords->fetch()) {
echo "test inside while";
echo "<h1>".$ARTICLE_NO."</h1>";
}
}
}
編集ます:
私はこのコードを試してみました
<?php
$mysqli = new mysqli("localhost", "", "", "");
$pk = $_GET["pk"];
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* prepare statement */
if ($stmt = $mysqli->prepare("SELECT ARTICLE_NAME, WATCH FROM AUCTIONS WHERE ARTICLE_NO = ? LIMIT 5")) {
$stmt->bind_param("i", $pk);
$stmt->execute();
/* bind variables to prepared statement */
$stmt->bind_result($col1, $col2);
/* fetch values */
while ($stmt->fetch()) {
printf("%s %s\n", $col1, $col2);
}
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
?>
私はそれが正常に動作パラメータを奪う場合は、これは、$ pkをせずに動作します。私は$のPK = 1を割り当てた場合ので、GET経由でPKを得るとの問題ではありません。代わりに、それはまだ失敗します。 1は有効なARTICLE_NO、およびSELECT ARTICLE_NAME、phmyadminの微細= 1 LIMIT ARTICLE_NOは5つの作品オークションFROM WATCHです。
編集:問題はmysqliのはBIGINTを扱うことができなかったということでした、私は今、文字列としてKを使用していますし、それが正常に動作します。
。解決
の値をチェックします:
$getRecords->num_rows
以前SELECT
が実際にどのようなデータを返しているかどうかを明らかに役立つはずである。
また、追加する必要があります:
$getRecords->store_result()
まず、あなたが全体のクエリが結果セットの行数を尋ねる前に完了したしたことを確認します。
また、 - あなたは整数に$pk
をキャストしてください!それは価値が台無しになっているに渡されている可能性があります。
他のヒント
あなたがそのコードを変更した場合、私はわからないんだけど、あなたはそこに接続するデータベースを選択していないようです。
それが問題である場合は、そのためmysqli_select_db(...)を使用します。
EDIT:あなたは、カラム、テーブル名などのために、大文字を使用しているようにも見えます。
。ケース感度の権利を取得し、それがコマンドラインから動作しますので、あなたはケース非感受性を想定していることが考えられます。私の知る限りではPHPのmysqliのドライバは、ケース、少なくともカラム名程度敏感である。