更新MySQL中的表行有问题

时间:2014-08-10 17:31:17

标签: php mysql

这是一个具体的问题。

我有一个功能如下。我echo$user变量$request只是为了确保它们已通过,我正在使用gettype()检查它们是否同时存在整数。

public function acceptRequest($user, $request){ 
    echo  $user   . $request ;
    $this->db->query("UPDATE test_requestBuddy SET accept = 'accepted' 
    WHERE user_requestId = $request AND user_responseId = $user ");
       echo 'success';        
 }

当我调用此函数时

$test->acceptRequest(3,9);

它没有更新。但是,当我用3和9替换MySQL中的$request$user变量时,

public function acceptRequest($user, $request){ 
    echo  $user   . $request ;
    $this->db->query("UPDATE test_requestBuddy SET accept = 'accepted' 
    WHERE user_requestId = 9 AND user_responseId = 3 "); // replace variables
       echo 'success';        
 }

有效。表格已更新。所以它不是MySQL语句的错误。我的变量都是整数。他们通过了这个功能。为什么我的表行没有更新?

3 个答案:

答案 0 :(得分:0)

你可以尝试

 $this->db->query("UPDATE test_requestBuddy SET accept = 'accepted' 
    WHERE user_requestId = '$request' AND user_responseId = '$user' ");

或者你可以检查mysql是否在严格模式下运行。

答案 1 :(得分:0)

使用MySQLi和Prepared语句:

public function acceptRequest($user, $request){ 
    echo  $user   . $request ;

    # NOTE Your db handle needs to be mysqli! 
    # http://php.net/manual/en/mysqli.quickstart.statements.php
    $mysqli = $this->db;

    if ($stmt = $mysqli->prepare("UPDATE test_requestBuddy SET accept = 'accepted' 
    WHERE user_requestId = ? AND user_responseId = ? ")) {

        /* bind parameters - i ensures integers */
        $stmt->bind_param("ii", $user, $request);

        /* execute query */
        $stmt->execute();

        /* close statement */
        $stmt->close();

        echo 'success';
     }  
 }

答案 2 :(得分:0)

正如Joe T所提到的,使用MySQLi将是最好的技术 - 因为你不想成为SQL注入的牺牲品。假设请求和响应是数据库中的整数:

$query = ("UPDATE test_requestBuddy SET accept = 'accepted' 
WHERE user_requestId = ? AND user_responseId = ? ");
        $stmt = $mysqli->prepare($query);
        $stmt->bind_param('ii', $request, $user);
        $stmt->execute(); 
        $stmt->bind_result();
        $stmt->fetch();
        $stmt->close();

但是为了你的问题,包含你的变量如:{$ variable}将确保sql语句正确运行:

$this->db->query("UPDATE test_requestBuddy SET accept = 'accepted' 
WHERE user_requestId = {$request} AND user_responseId = {$user} ");