在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 无效