PDOStatement :: execute():SQLSTATE [HY093]:参数号无效

时间:2014-04-02 20:54:20

标签: php mysql pdo

我正在尝试使用PDO进行更新,但我收到的错误是我没有检测出问题所在。

错误就是这个: PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:参数未在$ updateCategory-> execute();

中定义

有人知道为什么会这样吗?

$urledit = $_GET['edit'];
$f['name'] = $_POST['name'];
$f['content'] = $_POST['content'];
$f['tags'] = $_POST['tags'];
$f['date'] = $_POST['date'];


$updateCategory = $pdo->prepare("UPDATE categories SET name=:name, url=:url, content=:content, tags=:tags, date=:date WHERE id=:urledit");  
$updateCategory->bindValue(':name', $f['name']);
$updateCategory->bindValue(':url', $f['url']);
$updateCategory->bindValue(':content', $f['content']);
$updateCategory->bindValue(':tags', $f['tags']);
$updateCategory->bindValue(':date', $f['date']);
$updateCategory->bindValue(':id', $urledit);
$updateCategory->execute();
echo 'Update Sucessed!';

3 个答案:

答案 0 :(得分:2)

胜利的答案是正确的,但请不要绑定每个参数,PDO太棒了,执行函数允许你传递一个不正确绑定它们的数组:)如果你的唯一使用变量一旦没有必要将它声明为变量,这个例子就是,

<强> PHP

$parameters = array(
    ':name' => $_POST['name'],
    ':url' => $_POST['url'], 
    ':content' => $_POST['content'], 
    ':tags' => $_POST['tags'], 
    ':date' => $_POST['date'], 
    ':urledit' => $_GET['edit'])
);

$updateCategory = $pdo->prepare("UPDATE categories 
                                 SET name = :name, url = :url, content = :content, tags = :tags, date = :date 
                                 WHERE id = :urledit");

if($updateCategory->execute($parameters)) {
    echo 'Update Sucessed!';
}

答案 1 :(得分:1)

在查询中将:urledit更改为:id。所有绑定值必须在查询中匹配。

答案 2 :(得分:1)

此行需要更改:

$updateCategory->bindValue(':id', $urledit);

到此:

$updateCategory->bindValue(':urledit', $urledit);

因为在这一行:

$updateCategory = $pdo->prepare("UPDATE categories SET name=:name, url=:url, content=:content, tags=:tags, date=:date WHERE id=:urledit"); 

您引用占位符:urledit而不是:id