我正在使用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。 谢谢你的帮助。
答案 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%";