php – 警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:参数未在… filetext中定义
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:参数未在… filetext中定义,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2257字,纯文字阅读大概需要4分钟。
内容图文
![php – 警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:参数未在… filetext中定义](/upload/InfoBanner/zyjiaocheng/910/b3e147e923554193a5c5cd6c5852f945.jpg)
$fields是一个打印后获得如下值的数组:
Array ( [first_name] => Nisse [last_name] => Example [ssn] => 198306205053 [address] => Stockholm, Sverige [phone_number] => 54654987321546 [latitude] => 55.717089999999999 [longitude] => 13.235379 )
我从我的数据类中调用更新函数,如下所示:
DataManager::update_user($fields, $user_data['id'];
但我得到错误:
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in…filetext
我已经检查了其他几个类似的线程,但我想我在这里遗漏了一些基本概念,因为我仍然无法找到答案.据我所知,我的数组中有7个和7个项目,如果我定义了所有的值,我可以在SQL工作台中完美地运行它,即:
UPDATE users SET first_name = 'Kalle', last_name = 'Anka', ssn = 242345234, address = 'Stockholm', phone_number = 53423434, latitude = 17.189889231223423423424324234, longitude = 109.234234 WHERE id = 4
我已经尝试了PDO预处理语句,其中$user_id设置为特定值,也没有纬度/经度参数.
如果我忘记任何重要信息,只需指出它,我就会明白.地址是varchar,lat / long是DB btw中的浮点数.使用MYSQL.
功能如下:
public static function update_user($fields, $user_id)
{
$db = self::_connect();
$st = $db->prepare("UPDATE users SET first_name = ?, last_name = ?, ssn = ?, address = ?, phone_number = ?, latitude = ?, longitude = ? WHERE id = '{$user_id}'");
$st->execute($fields);
return ($st->rowCount()) ? true : false;
}
解决方法:
如果使用位置参数,则传递给execute()的参数数组必须是序数数组.同样,如果使用命名参数,则数组必须是关联数组.
这是确认行为的测试:
$stmt = $db->prepare("SELECT ?, ? ,?");
$params = array( 'a', 'b', 'c' );
// OK
if ($stmt->execute($params)) {
print_r($stmt->fetchAll());
}
$params = array( 'A'=>'abc', 'B'=>'def', 'C'=>'ghi' );
// ERROR!
if ($stmt->execute($params)) {
print_r($stmt->fetchAll());
}
$stmt = $db->prepare("SELECT :A, :B, :C");
$params = array( 'a', 'b', 'c' );
// ERROR!
if ($stmt->execute($params)) {
print_r($stmt->fetchAll());
}
$params = array( 'A'=>'abc', 'B'=>'def', 'C'=>'ghi' );
// OK
if ($stmt->execute($params)) {
print_r($stmt->fetchAll());
}
请注意,在当前版本的PHP中,关联数组键不必以:作为@prodigitalson注释的前缀.旧版PHP中的数组键中曾经需要:前缀.
还值得一提的是,当我尝试在单个查询中混合位置参数和命名参数时,我遇到了错误和不可预测的行为.您可以在应用中的不同查询中使用任一样式,但为给定查询选择一种或另一种样式.
内容总结
以上是互联网集市为您收集整理的php – 警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:参数未在… filetext中定义全部内容,希望文章能够帮你解决php – 警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:参数未在… filetext中定义所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。