PHP 通过 MySQL 准备好的语句更新值

标签 php mysql prepared-statement

我很抱歉再次发布有关准备好的语句,但我对 PHP/MySQL 很陌生,而且对准备好的语句完全陌生。

我的代码如下所示:

function query($query, $bindings, $conn) {
  $stmt = $conn->prepare($query);
  $stmt->execute($bindings);

//$results = $stmt->fetchAll();

  return $results ? $results : false;
}

$sitecategories = array(
0 => "Uncategorized", 10 => "Abstract", 11 => "Animals"
);

foreach ($sitecategories as $key => $value) {

  if ( $conn ) {
      $catquery=query("INSERT IGNORE into categories (cat_id, label) VALUES (:catid, :label)",
      array(':catid'=>$key, ':label'=>$value),
      $conn);
} else {
     print "could not connect to the database";
       }
}

连接在其他地方,但 INSERT 工作正常。生成的 mysql 表如下所示(cat_id 是唯一的):

+----+--------+-------------+
| id | cat_id | label       |
+----+--------+-------------+
|  1 |      0 | Uncategoriz |
|  2 |     10 | Abstract    |
|  3 |     11 | Animals     |

但是,我试图弄清楚如何创建更新(如果从 $sitecategories 添加或删除项目)。我将 INSERT 调整为

foreach ($sitecategories as $key => $value) {
  if ( $conn ) {
    $catquery=query("UPDATE categories SET cat_id=:catid, label = :label",
    array('catid'=>$key, 'label'=>$value),
$conn);
  } else {
    print "could not connect to the database";
  }
}

但是当我运行这个时我得到了

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity
constraint violation: 1062 Duplicate entry '0' for key 'cat_id''

我猜这与 cat_id 的唯一性有关,这个问题与我准备好的语句无关,而是一个常见的 MySQL 语法问题。任何有关任何一个的帮助都将非常感激!

最佳答案

您的更新查询中没有 WHERE 子句,因此它将尝试将每条记录中的所有 catid 更改为(在本例中)“0”。这就是为什么它给你错误。它尝试为每条记录设置相同的 catid,但它必须是唯一的。您需要向查询添加 WHERE 子句,具体取决于您要更改的记录。就像 WHERE id=:id 一样。或者 WHERE catid=:catid。我不认为您想更改每条记录?

关于PHP 通过 MySQL 准备好的语句更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21209246/

相关文章:

java - 在Java中准备动态Statement的正确方法

php - 简单的 JSONP 和 PHP 示例不起作用

php - mysql 表中的枚举值

mysql - 如果特定的 meta_key 不存在,则 wordpress 自定义 mysql 查询仅获取帖子

mysql - TINYINT 如何在 MySQL 上存储字符串值

java - PreparedStatement 抛出 NullPointerException

php - 如何通过单击“取消”按钮关闭窗口?

php - 模拟 Controller 从 WebTestCase 调用的服务

python - 带有 JOIN 和 GROUP BY SQL 查询的 Django COUNT

php - 带有 IN() 条件的 WordPress 准备语句