2013-04-01 13 views
8

次のコードを実行しようとしていますが、​​行には届きません。PHPでbind_param()を実行するには?

$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である必要がありますが、manual of bind_param()をチェックすると、私はそこに任意の構文エラーを見つけることができません。 http://php.net/manual/en/mysqli-stmt.bind-param.php

$varが実際にそれをバインドするために定義する必要がないこと:

$var = 1; 

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

マニュアルを参照してください:あなたが基準として使用される変数を渡す必要が結合パラメータが

+3

をバインドするために、変数を宣言し、それをデバッグするために、受信しましたか?私は '$ stmt-> error'をエコーすると、mysqlが不平を言っている正確なエラーを得ることができると思います。 – Todd

+0

私の質問が更新されました。なぜなら、 'bind_param()'の後に次の行を実行することさえできないからです! @Toddこれは便利であり、心に留めておくことが重要です。 – Lucio

答えて

11

。以下は、完全に有効です:

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

foreach ($array as $element) 
{ 

    $var = $element['foo']; 

    $stmt->execute(); 

} 
+2

+1、驚くべきことに、この事実の参考資料はありますか?私はそれを学んだことはありません:) –

+0

はい、私の答えへのリンクを追加しました。 – MichaelRushton

+0

Tnx !!!私は3時間のような同じ問題を抱えていました.... –

-6

あなたの実際の問題は、あなたが使用できないドライバを使用しようとしている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]); 

しかし、まだあなたは、準備されたステートメントの外に戻ってデータを取得してトラブルを持っている:)

+0

それが使えないのなら、期待どおりに動いているソフトウェアがそこにありますか? –

+0

人々は古いmysql extとして鈍いものを使用しているので、**すべての欠点と不安を抱えています** –

+0

欠点と不安です、私は同意します。 「使用不可能」はまったく別のものです。 –

-1

をここでは単純な、について説明され
エラーをエコーないのはなぜ は

$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); 
関連する問題