2016-07-30 120 views
0

我正在開發一個項目,我需要在它找到相應的ID時將布爾值isHere設置爲true(1) 。但我似乎無法更新數據庫。我可以從數據庫中選擇。PHP&MySql:無法更新數據庫

我有兩個問題。第一:

$handle = @fopen("../smartriders.txt", "r"); 

    if ($handle) 
     { 
     while (($smartRider = fgets($handle, 255)) !== false) 
     { 

      if($update = $conn->query("UPDATE members SET isHere = 1 WHERE SmartRiderID = ?", $smartRider)) 
      { 
       print("update successful"); 
      } 
     } 
     if (!feof($handle)) { 
      echo "Error: unexpected fgets() fail\n"; 
     } 
     fclose($handle); 
    } 

這產生一個警告:

警告:mysqli的::查詢()期望參數2爲整數,字符串在index.ph給出關於線14

線14:

if($update = $conn->query("UPDATE members SET isHere = 1 WHERE SmartRiderID = ?", $smartRider)) 

第二個問題: 即使我手動TY pe數據庫中的smartRider,沒有任何更新。

任何幫助真的不勝感激。

+0

'期待整數'。你明白這是什麼意思嗎? –

+0

並參考mysqli_query手冊。將您的值傳遞給'query()'並不意味着它將被添加到您的查詢中。 –

+0

是的,我這樣做,我不明白爲什麼它說,因爲SmartRiderID是一個VarChar。 – Marcel

回答

0

如果引用mysqli_query手冊 - 你會看到這個函數的第二個參數是int $resultmode

看 - 它是int。它的目的是定義返回結果的結構。所以,傳遞你的$smartRiderquery()無用

query功能不起作用與預處理語句。

準備語句是prepare()

$stmt = $mysqli->prepare('UPDATE members SET isHere = 1 WHERE SmartRiderID = ?'); 
$stmt->bind_param('s', $smartRider); 
$res = $stmt->execute(); 

對於cheking的​​結果看http://php.net/manual/en/mysqli-stmt.execute.php

+0

謝謝。我習慣了David Malan的哈佛大學的CS50x圖書館,它允許我做了什麼。我錯誤地認爲沒有它就會工作。 – Marcel

-1

問題1:警告:mysqli的::查詢()期望參數2爲整數,在給定的index.ph上線柱14

溶液:

if($update = $conn->query("UPDATE members SET isHere = 1 WHERE SmartRiderID = " . $smartRider)) 
+0

這是不安全的。將任何內容添加到你的'smartRider'並且有一個很好的sql注入。 –