在mysql中使用pdo的参数号无效问题

Posted

技术标签:

【中文标题】在mysql中使用pdo的参数号无效问题【英文标题】:Invalid parameter number issue using pdo in mysql 【发布时间】:2014-07-21 09:48:49 【问题描述】:

我最近开始使用 pdo 进行 mysql 查询,但出现以下错误

警告:PDOStatement::execute(): SQLSTATE[HY093]: 参数号无效:参数未定义

我的代码是,

$conquery = $this->db->prepare("SELECT questions.quid,answers.catid,answers.ansid  
            FROM questions,answers where  questions.qtype  = ? and answers.userid = ? and (questions.quid = answers.quid)");

$conquery->execute(array('questions.qtype' => 'concern','answers.userid' =>$_SESSION['user_id'])); 

【问题讨论】:

【参考方案1】:

您误解了参数的工作原理。 有两种使用参数的方法。而且这些方式不能同时使用。

索引参数:

当您使用索引参数时,您在查询中使用?。 然后绑定你的参数,你使用一个简单的索引数组。在你的案例中,你会写:

$conquery = $this->db->prepare("SELECT questions.quid,answers.catid,answers.ansid  
        FROM questions,answers where  questions.qtype  = ? and answers.userid = ? and (questions.quid = answers.quid)");

 $conquery->execute(array( 'concern',$_SESSION['user_id']))

命名参数:

当您使用命名参数时,您在参数名称前添加一个:(即等号右侧),然后使用命名数组,在您的情况下它是:

$conquery = $this->db->prepare("SELECT questions.quid,answers.catid,answers.ansid  
        FROM questions,answers where  questions.qtype  = :qtype and answers.userid = :userid and (questions.quid = answers.quid)");

 $conquery->execute(array('qtype' => 'concern','userid' =>$_SESSION['user_id']))

【讨论】:

【参考方案2】:

你的参数没有在你准备好的语句中命名(你使用'?'),你应该试试这个:

$conquery->execute(array('concern',$_SESSION['user_id'])); 

【讨论】:

非常感谢您的帮助。我对 artragis 描述的两种方法进行了很好的比较。

以上是关于在mysql中使用pdo的参数号无效问题的主要内容,如果未能解决你的问题,请参考以下文章

将PHP PDO迁移到Laravel PDO会导致参数号无效

PDO 更新错误无效参数号:绑定变量的数量与令牌的数量不匹配

SQLSTATE[HY093]:无效的参数号 - PDO Select 语句

SQLSTATE[HY093]:参数号和 PDO::ATTR_EMULATE_PREPARES 无效

致命错误:未捕获PDOException:SQLSTATE [HY093]:参数号无效:无参数

PDO从先前选择插入的绑定参数