2013-12-23 51 views
0

什麼錯在這個腳本它給我錯誤bind_parammysqli_stmt :: bind_param()變量不匹配

if(isset($_GET['ID'])){ 

$page_id = $_GET['ID']; 

     $page_id = mysqli_real_escape_string($con, $page_id); 



$select_query = $con->prepare("select * from save_data where ID='$page_id'") 
    or die(mysqli_error($con)); 

$select_query->bind_param('i', $page_id); 

$select_query->execute(); 

$result = $select_query->get_result(); 

收到此錯誤

警告:mysqli_stmt :: bind_param():類型定義字符串中的元素數與第23行中C:\ xampp \ htdocs \ mysql_login \ pictures.php中的綁定變量數不匹配

+0

如果您想使用佔位符,那麼您可以** NOT **轉義將用於該佔位符的數據。它會有效地加倍逃避數據並導致麻煩。 –

回答

5

您在查詢中未使用佔位符。在你不經意地把變量,你想用,而不是取代它:

$select_query = $con->prepare("select * from save_data where ID='$page_id'") 

應該是:

$select_query = $con->prepare("select * from save_data where ID=?") 
+0

感謝兄弟的工作:) – user3121850

2

你想要的,而不是行這一點,你必須:

$select_query = $con->prepare("select * from save_data where ID=?"); 

在代碼你發佈了你根本不使用參數綁定 - 你可以直接在SQL字符串中插入變量。對於參數綁定,您需要插入一個?佔位符!

此外,請不要使用or die(mysqli_error($con)進行調試。這非常哈克。或者只是讓它失敗併產生一個異常(mysqli確實有這個選項,對嗎?)或者編寫自定義包裝器來正確處理錯誤,而不需要每次執行查詢都重複相同的代碼!

+0

感謝您的建議兄弟 – user3121850

+0

我也想知道。這個答案既正確又內容豐富。 –

相關問題