2016-07-30 93 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注入。 –