mysql - pdo执行给出错误

标签 mysql pdo

昨天我有一个关于“pdo插入和更新”的主题。现在是以下内容

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in  on line 148

这是我的代码。

$sth = $db->prepare(


'INSERT INTO track (`rsname`, `overallranknow`, `overalllevelnow`, `overallxpnow` )' .
  'VALUES (:name, :Overalln, :Overall1, :Overall2) '. 
  'ON DUPLICATE KEY UPDATE ' .
    "rsname = :name"  .
    "overallranknow = :Overalln" .
    "overalllevelnow = :Overall1" .
    "overallxpnow = :Overall2" 
);
$sth->bindValue(':name', $name, PDO::PARAM_STR);
$sth->bindValue(':Overalln', $Overalln, PDO::PARAM_INT);
$sth->bindValue(':Overall1', $Overall[1], PDO::PARAM_INT);
$sth->bindValue(':Overall2', $Overall[2], PDO::PARAM_INT);
$sth->execute();

错误说我的执行行是错误的1。我已经用数组尝试过,但仍然得到了它。我希望也许知道我的意思。

~Kev(英语不好=抱歉)

最佳答案

来自PDO::prepare manual ;

You must include a unique parameter marker for each value you wish to pass in to the statement when you call PDOStatement::execute(). You cannot use a named parameter marker of the same name twice in a prepared statement.

这(遗憾的是)意味着您必须使用辅助名称复制绑定(bind),才能在查询中两次使用相同的值。不漂亮,比如;

$sth = $db->prepare(
  'INSERT INTO track (`rsname`, `overallranknow`, `overalllevelnow`, `overallxpnow` )' .
    'VALUES (:name, :Overalln, :Overall1, :Overall2) '. 
    'ON DUPLICATE KEY UPDATE ' .
      "rsname = :name_2"  .
      "overallranknow = :Overalln_2" .
      "overalllevelnow = :Overall1_2" .
      "overallxpnow = :Overall2_2" 
);
$sth->bindValue(':name', $name, PDO::PARAM_STR);
$sth->bindValue(':name_2', $name, PDO::PARAM_STR);
$sth->bindValue(':Overalln', $Overalln, PDO::PARAM_INT);
$sth->bindValue(':Overalln_2', $Overalln, PDO::PARAM_INT);
$sth->bindValue(':Overall1', $Overall[1], PDO::PARAM_INT);
$sth->bindValue(':Overall1_2', $Overall[1], PDO::PARAM_INT);
$sth->bindValue(':Overall2', $Overall[2], PDO::PARAM_INT);
$sth->bindValue(':Overall2_2', $Overall[2], PDO::PARAM_INT);
$sth->execute();

编辑:由于 MySQL 允许 VALUES ON DUPLICATE KEY 中的关键字不必重复参数,您最好使用 @YourCommonSense 针对这种情况的答案。

关于mysql - pdo执行给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17564257/

相关文章:

php - 通过 PHP 进行简单的 MySQL 查询

mysql - 如果结果有限,SQL 查询要变得更广泛吗?

php - 查询数据库时我得到的都是假的

php - 只获取每个用户的最后一条消息

php - 按姓名搜索成员后如何显示数据库中共享同一地址的所有成员

MySQL - 选择或提取 JSON 对象数据作为列和值

mysql - hibernate 异常 : While migrating from mysql to oracle 11g db

php - 如何对提交到sql数据库的文章进行分类?

php - 从类函数返回的变量产生错误 "Call to undefined method PDOStatement::bind()"

php - MySQL PHP PDO 准备语句 - 性能问题与安全性