PDO ON DUPLICATE KEY UPDATE不适用于PHP 5.1.6

时间:2015-02-12 10:11:57

标签: php mysql pdo

<?php
$sql = "INSERT INTO `tables`
    (
        `uuid`,
        `name`
    )
    VALUES
    (
        :uuid,
        :name
    )
    ON DUPLICATE KEY UPDATE
        `name` = :name
    ";
$sth = $dbh->prepare($sql);
$sth->bindValue(':uuid', 'abc');
$sth->bindValue(':name', 'Chan');
$sth->execute()

当我第一次执行代码时,它会向表中插入正确的数据,但是当我第二次执行时,name值变为0,即使我将名称更改为其他值也会获得相同的结果,但是如果我这样做的话它像:

<?php

$sql = "INSERT INTO `tables`
    (
        `uuid`,
        `name`
    )
    VALUES
    (
        :uuid,
        :name
    )
    ON DUPLICATE KEY UPDATE
        `name` = 'other name'
    ";
$sth = $dbh->prepare($sql);
$sth->bindValue(':uuid', 'abc');
$sth->bindValue(':name', 'Chan');
$sth->execute()

name值变为other name,如何解决?

1 个答案:

答案 0 :(得分:2)

AFAIK您不能多次使用相同的参数名称。请尝试以下

<?php
$sql = "INSERT INTO `tables`
(
    `uuid`,
    `name`
)
VALUES
(
    :uuid,
    :name
)
ON DUPLICATE KEY UPDATE
    `name` = :name2
";

$sth = $dbh->prepare($sql);
$sth->bindValue(':uuid', 'abc');
$sth->bindValue(':name', 'Chan');
$sth->bindValue(':name2', 'Chan');
$sth->execute()

编辑:请参阅下面的评论