0

我正在使用 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

4 回答 4

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 子句相同的值,这很糟糕,请使用主键。

两个原因,第一,它永远不会更新您希望的行,第二,如果其他人有该名称,您将更新他们行的其他值。

于 2012-06-21T13:51:09.233 回答
1

我不相信您需要 PDO 变量周围的单引号(示例 - :名称,:公司等)

于 2012-06-21T13:51:22.373 回答
1

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

另外,如果可用,我建议使用 Primary Keys 和 numbers 而不是 field name

于 2012-06-21T13:51:40.423 回答
0

可能没有查询可以更新的数据,当在查询中使用像 name 这样的字符串时,尝试给出 like & % 以确保安全(如果在插入时不小心,可能会有空格)

例子

WHERE Name like '%name%";
于 2012-06-21T13:58:47.597 回答