2013-04-01 35 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()我無法找到任何語法錯誤在那裏。

+3

爲什麼不回顯收到的錯誤以幫助調試?我認爲迴應'$ stmt-> error'會讓你感覺到mysql正在抱怨的確切錯誤。 – Todd

+0

我更新了我的問題,因爲現在我甚至無法在'bind_param()'之後運行以下行! @Todd這很有用,重要的是要記住。 – Lucio

回答

11

當綁定需要傳遞被用作基準的可變參數:

$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(); 

} 
+2

+1,令人驚歎的是,你有沒有參考這個事實?我從來沒有學過:) – 2013-04-01 17:40:00

+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分機,**保留所有的缺點和不安全感** –

+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);