2016-05-17 108 views
0

我希望有人能指出我的错误与此更新,我尝试过各种方式,但似乎无法得到它的工作,可能是一个简单的错误,但我只是可以'似乎找不到它。php pdo更新与变量查询

function set_live($row_id, $mobile_number) 
{ 
    global $conn; 
    $live = 1; 

    $sql = " 
    UPDATE 
     connections 
    SET 
     live = :live, 
     voice_number = :mobile_number 
    WHERE 
     id = :row_id"; 

    $stmt = $conn->prepare($sql); 
    $stmt->bindParam(':mobile_number', $mobile_number, PDO::PARAM_INT); 
    $stmt->bindParam(':row_id', $row_id, PDO::PARAM_INT); 
    $stmt->bindParam(':live', $live, PDO::PARAM_INT); 
    $stmt->execute(); 

    echo "Record edited successfully"; 
    $conn=null; 
} 

$conn是PDO连接与SELECT的等 所有变量都是数字和所有呼应行,所以在功能 我可以运行在phpMyAdmin实际值的查询工作,它的工作原理确定

+0

如何调用'set_live'函数? – Saty

+0

你为什么使用'global'变量?你为什么不把它传递给那个方法,或者更好的是,如果你用它来操纵数据库,那么它会把它变成类的成员(当然,如果这是一个类)?乍一看,它似乎是好的(如果'$ conn'是你声称的那样;你是否试图转储'$ row_id'和'$ mobile_number'?你试过转储'$ conn'吗? – DonCallisto

+0

你应该添加错误处理/让PDO抛出异常。如果你在每次使用它时将它设置为'null',你可能没有数据库连接... – jeroen

回答

1

只需更换这行

$stmt->bindParam(':mobile_number', $mobile_number, PDO::PARAM_INT); 

与此

$stmt->bindParam(':mobile_number', $mobile_number, PDO::PARAM_STR); 

因为电话号码长度比整数多。

+0

在我的情况下,我也曾在同一页面中使$ conn变量为null! – ruraldev

-1

为什么不尝试使用数组?这种做法可能做的伎俩为您提供:

<?php 
     function set_live($row_id, $mobile_number){ 
      global $conn; 
      $live = 1; 
      $sql = "UPDATE connections SET live=:live, voice_number=:mobile_number WHERE id=:row_id"; 
      $stmt = $conn->prepare($sql); 
      $params = array(
       "live"   =>$live, 
       "mobile_number" =>$mobile_number, 
       "row_id"  =>$row_id, 
      ); 

      $stmt->execute($params); 
      echo "Record edited successfully"; 
      $conn=null; 
     } 
+0

为什么这会比绑定个人价值更好?两者都完全有效。 – jeroen

+0

@ jeroen它在哪里说,这将**比上述帖子中的**更好?这里是上述文章中唯一的句子:**为什么不使用数组?*** **这种方法可能会为你做一些技巧:** ***哪里有更好的比较或更糟糕的是在上面的声明?*** – Poiz

+0

好吧,那么它为什么会*做伎俩*? – jeroen