我這個查詢轉換成一份準備好的聲明:msyqli預處理語句不工作的權利
$stmt = "SELECT * FROM `table` WHERE col1 ='". $var1. "' and col2 = '".$var2."' and col3 ='".$var3."'";
$result = mysqli_query($db, $stmt);
$item_row=mysqli_fetch_row($result);
與它的結果是我回應了item_row[1]
,item_row[2]
,等這工作得很好。
這是事先準備好的聲明,我放在一起,但它不工作:
$stmt = $db->prepare("SELECT * FROM `table` WHERE col1 = ? and col2 = ? and col3 =?");
$stmt->bind_param("sss", $var1,$var2,$var3);
$stmt->execute();
while ($item_row = $stmt->fetch()) {
print_r($item_row); // prints: 1
var_dump($item_row); // prints: bool(true)
}
我利用How can I prevent SQL injection in PHP?代碼嘗試,但它打破了整個頁面。
我也讀過並嘗試過How can I prevent SQL injection in PHP?的例子,但都沒有工作。上面的例子是我得到的最遠的例子。
任何想法我需要做什麼?
列名是錯在你的PDO聲明你需要使用'col1','col2','col3'就像你在你的第一個陳述中所做的一樣。 – cmorrissey
我更改了名稱以便於閱讀。他們確實匹配。如果是這種情況,我不認爲我得到'bool(true)' –