【问题标题】:PHP PDO UPDATE table not workingPHP PDO UPDATE 表不工作
【发布时间】:2012-06-23 18:35:16
【问题描述】:

我正在使用 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。 感谢您的帮助。

【问题讨论】:

  • 你有没有看是否真的有错误(执行语句的返回码),如果有错误,具体是什么? PDO::errorInfo() 在那里很有帮助。
  • 是的。没有例外。如果我将 :cid 替换为一些有效的 ID,则查询有效
  • 那么,您确认 $customer_id 包含正确的值了吗?如果您将 $customer_id 替换为某个有效 ID 会怎样?
  • 您确定$customer_id 甚至包含一个值吗?并在您尝试访问它的那段代码中定义?
  • 是的。我试着回应它。它确实有一个有效值

标签: php mysql pdo


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

我认为您不需要在 PDO 变量周围加上单引号(例如 - :name、:company 等)

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 对此感到抱歉。我现在正在使用 CompanyID=:cid,但它仍然无法正常工作。尽管如此,行数还是 0。公司 id 是唯一的并且保持不变。
    【解决方案4】:

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

    例子

    WHERE Name like '%name%";
    

    【讨论】:

    • 我正在检查CompanyID,抱歉弄错了。
    • 尝试使用实际字符串而不是变量来交叉验证您在语法上是否正确
    • $sql =UPDATE 客户 SET Name = ?, WHERE Name = ?"; $query = $conn->prepare($sql); $query->execute(array($name,$name ));
    • 尝试使用问号占位符 $sql =UPDATE customers SET Name = ?, WHERE Name = ?"; $sth->bindParam(1, $name ); $sth->bindParam(2, $name);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2014-09-09
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多