1

このブロックでは、$ stmtは期待どおりにfalseを返しません、$ bindはtrueですが、$ stmt-> execute()に到達すると、終了し、trueもfalseも返しません。私がそれからfalseを得ることができるのは、そのドキュメントに従って実行するための引数で変数を使用する場合だけですが、実行呼び出しで引数を使用したことはなく、他の人の例を見つけることができません手続き型の準備されたステートメントを除いて1つを使用します。何かが足りないのかわかりません。誰かアイデアはありますか?

$stmt = $mysqli->prepare("SELECT ... FROM `table` WHERE `tid` = ?");

if ($stmt !== FALSE) {
    echo 'Statement was true.';
    $bind = $stmt->bind_param('s', $this->tid);
    echo 'after bind';
    if ($bind)
        echo 'bind was good ';
    else
        echo 'bind was bad';
    $exec = $stmt->execute();
    if ($exec)
        echo 'exec was good';
    else
        echo 'exec was bad';
    echo 'after execute';
    // etc.
} else {
 // rest of code
}

@tntuの受け入れられた答えと次のコメントは、この問題を解決するための正しい軌道に私を導いてくれました。[リンク]http://stackoverflow.com/questions/5580039/fatal-error-uncaught-exception-mysqli-sql-exception-with-message-no-index-us

MySQLは多くのエラー報告を行うことができ、他の問題を理解するために、スタックと問題の関数の前にmysqli_report(MYSQLI_REPORT_ALL)を設定しました。いずれにせよ、mysqli_report(MYSQLI_REPORT_OFF)を設定すると、実行が意図したとおりに実行され、警告やエラーでphpが停止することはありませんでした。

4

1 に答える 1

1
$bind = $stmt->bind_param('s', $this->tid);

sは文字列を表します

iに変更すると、機能するはずです。

エラー管理の実行についても参照してください。mysqli_erromysqli_errno

このようなもの:

if ($mysqli->errno) { logging("ERRO: ".$mysqli->error . "( " . $mysqli->errno . " )"); }
于 2012-10-18T07:44:29.170 に答える