PHP PDO UPDATE表无法正常工作

时间:2012-06-21 13:47:28

标签: php mysql pdo

我正在使用PHP PDO在表格中插入和更新值。 插入工作正常。但是当我尝试更新时,没有任何反应。 我没有错误,没有例外。

代码是

   $sql="UPDATE customers SET Name=:name,Company=:company,Address=:address,City=:city,State=:state,Country=:country,MainP=:phonem,CellP=:phonec,Email=:email,Action=:action WHERE CompanyID=:cid";

其余的:

               $stmt = $dbh->prepare($sql);
                 $stmt->bindParam(":name",$name);
                $stmt->bindParam(":company",$company);
                $stmt->bindParam(":cid",$customer_id);
                $stmt->bindParam(":address",$address);
                $stmt->bindParam(":city",$city);
                $stmt->bindParam(":state",$state);
                $stmt->bindParam(":country",$country);
                $stmt->bindParam(":phonem",$main_num);
                $stmt->bindParam(":phonec",$cell_num);
                $stmt->bindParam(":email",$email);
            $stmt->bindParam(":action",$action);
            $stmt->execute();
           echo $stmt->rowCount();

那么,我做错了吗?

编辑:忘记提到我的行数为0.我试过没有引号。它仍然无法正常工作

编辑:刚刚发现customer_id从另一个函数返回为0。 谢谢你的帮助。

4 个答案:

答案 0 :(得分:3)

取出引号,field =:field

$sql="UPDATE customers SET Name = :name, Company = :company, Address  = :address, City = :city, State= :state, Country = :country, MainP = :phonem, CellP = :phonec, Email = :email, Action = :action WHERE Name = :name";

此外,Action可能受到保护,您可能需要将其包装在``

最后,您将名称设置为与where子句相同的值,即使用主键。

有两个原因,一个是,它不会更新你希望的行,其次,如果有其他人拥有该名称,你将更新其行的其他值。

答案 1 :(得分:1)

我认为您不需要围绕PDO变量的单引号(示例 - :name,:company等)

答案 2 :(得分:1)

查询失败,因为您要更新:name值,这实际上是您尝试设置的新值。因此,没有找到任何行来进行更新。 要解决此问题,您需要更改where子句并使用:old_name

此外,我建议使用主键和数字(如果可用)而不是字段name

答案 3 :(得分:0)

可能没有查询可以更新的数据,当在查询中使用像name这样的字符串时,请尝试给出类似& %是安全的(如果在插入时没有注意,可能会有空格)

例如

WHERE Name like '%name%";