【问题标题】:Special characters in pdopdo 中的特殊字符
【发布时间】:2014-11-02 19:42:34
【问题描述】:

当我尝试更新我的值时,它给了我以下错误:SQLSTATE[HY093]: Invalid parameter number: parameter was not defined。 这只发生在特殊字符上,例如: (hello;) 而不是 (hello) 由于某种原因,它找不到带有特殊字符的值,我只能插入它们 并且不会从我的数据库中更新或删除它。

并且数据库已经设置为utf8。

public function update($data, $key, $value) {
    try { 

        $this->query = 'UPDATE ' . $this->table . ' SET ';

        array_walk($data, function($index, $key) {
            $this->query .= $key . ' = ' . ':' . $key . ', ';
        });

        $this->query = rtrim($this->query, " ,");

        $this->query .= " WHERE $key = :$value"; 

        $stmt = $this->db->prepare($this->query);

        $stmt->execute(array_merge($data, array($value => $value)));

        return true;

    } catch(PDOException $e) {
        echo $e->getMessage();
    }
}

我如何使用它的示例:

if(isset($oldValue, $newValue)) {
$data['database']->update(array("name" => $newValue), "name", $oldValue);
}

数组是给出一个键和一个新值来更新,逗号后面是在表'name'中搜索值。

如果有人知道这个问题的解决方案,那么我会很高兴,在此先感谢。

【问题讨论】:

  • 你能举个例子说明你是怎么打电话给update的吗?
  • 您需要从两个:$value 中删除$ 符号-另外,这很难说,但是如果您碰巧使用了key,-key 是MySQL 保留字; 只是一个见解。
  • @icktoofay 看到上面的帖子我编辑了它
  • @Fred-ii- 不,这就是stackoverflow的显示方式,使用“”时,您可以在其中放置一个变量
  • @user3139504 啊,好的。通常,绑定中没有$,至少我从不使用它们。

标签: php pdo special-characters


【解决方案1】:

您正在参数化 部分,这很好,但您可能应该参数化 全部。为了更清楚地演示,让我们假设我们正在调用update(array("occupation" => "poet"), "name", "Horace"),而$this->table 设置为"persons"。然后我们将编写此 SQL:

UPDATE persons SET occupation = :occupation WHERE name = : Horace

然后我们将使用这些参数值执行它:

occupation => poet
:Horace => Horace

occupation = :occupation 部分非常出色且正确;但是name = : Horace:Horace => Horace 是错误的。相反,您可能应该编写这样的查询:

UPDATE persons SET occupation = :occupation WHERE name = :name

还有这些参数值:

occupation => poet
name => Horace

如果您曾经遇到过将其称为 update(array("occupation" => "unemployed"), "occupation", "poet") 的情况,但是,您可能会遇到一些问题,因为您需要为 occupation 设置两个不同的参数(一个旧的,一个新的),并且您会打电话给occupation。一个会胜过另一个,而您的 UPDATE 将无能为力。所以你必须处理这种情况,但除此之外,它应该相当简单。

【讨论】:

    猜你喜欢
    • 2011-12-21
    • 2013-06-22
    • 2017-04-02
    • 2012-08-27
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    相关资源
    最近更新 更多