11

次のコードを機能させようとしていますが、execute()行に到達できません。

$mysqli = $this->ConnectLowPrivileges();
echo 'Connected<br>';
$stmt = $mysqli->prepare("SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?");
echo 'Prepared and binding parameters<br>';
$stmt->bind_param('i', 2 );
echo 'Ready to execute<br>'
if ($stmt->execute()){
    echo 'Executing..';
    }
} else {
    echo 'Error executing!';
}
mysqli_close($mysqli);

私が得る出力は次のとおりです。

Connected
Prepared and binding parameters

問題は5 行目にあるはずですが、のマニュアルをbind_param()確認しても構文エラーは見つかりません。

4

3 に答える 3

13

パラメーターをバインドするときは、参照として使用される変数を渡す必要があります。

$var = 1;

$stmt->bind_param('i', $var);

マニュアルを参照してください: http://php.net/manual/en/mysqli-stmt.bind-param.php

$varバインドするために実際に定義する必要はないことに注意してください。以下は完全に有効です。

$stmt->bind_param('i', $var);

foreach ($array as $element)
{

    $var = $element['foo'];

    $stmt->execute();

}
于 2013-04-01T17:37:22.743 に答える
0

ここでは簡単な説明です
バインドする変数を宣言します

    $var="email";
$mysqli = $this->ConnectLowPrivileges();
echo 'Connected<br>';

$var="email";
$stmt = $mysqli->prepare("SELECT name, lastname FROM tablename WHERE idStudent=?" LIMIT=1);
echo 'Prepared and binding parameters<br>';
$stmt->bindparam(1,$var); 
于 2014-11-05T04:17:05.000 に答える
-7

実際の問題は 5 行目ではなく、1 行目にあります
。使用できないドライバーを使用しようとしています。PDOはまさにあなたが望むことをしますが

$sql = "SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?"
$stm = $this->pdo->prepare($sql);
$stm->execute(array(2));
return $stm->fetch();

この回答が書かれてから何年も経った後、「引数のアンパック」と呼ばれる新しい PHP 機能が登場しました。したがって、バージョン 5.6 以降、値を bind_param に渡すことができます。

$stmt->bind_param('i', ...[2]);

しかし、それでも、準備されたステートメントからデータを取り戻すのに問題があります:)

于 2013-04-01T19:05:29.060 に答える