PDOException:SQLSTATE [HY093] [重复]
Posted
技术标签:
【中文标题】PDOException:SQLSTATE [HY093] [重复]【英文标题】:PDOException: SQLSTATE[HY093] [duplicate] 【发布时间】:2020-12-24 10:09:22 【问题描述】:嘿嘿。
我是 php 新手,但学习困难重重。我发现这是处理数据库连接的方法。已经调试了代码,但还剩下一件顽固的事情。似乎无法将我的大脑包裹在这个错误代码上。任何指针都以简单的方式,所以即使我理解。 ;-)
我正在浏览这个页面:https://www.php.net/manual/en/pdostatement.bindparam.php
错误信息: 数据库连接建立PDOException: SQLSTATE[HY093]: 参数号无效:参数未在 C:\xampp\htdocs\Test\dbtest.php:28 堆栈跟踪:#0 C:\xampp\htdocs\Test\dbtest.php( 28): PDOStatement->execute() #1 main
<?php
// Require needed classes
require_once('dbhandler.php');
// Create needed objects
$dbh = new DBHandler();
// Check if database connection established successfully
if ($dbh->getInstance() === null)
die("No database connection");
//$datetime = date("Y-m-d H:i:s");
$epost = 'svante@telia.com';
$namn = 'Svante';
$användarnamn = 'Poffe';
$lösenord = '1596';
try
$sql = "INSERT INTO users(epost, namn, användarnamn, lösenord) VALUES(:epost, :namn, :användarnamn, :lösenord)";
$stmt = $dbh->getInstance()->prepare($sql);
$stmt->bindParam(':epost', $epost, PDO::PARAM_STR);
$stmt->bindParam(':namn', $namn, PDO::PARAM_STR);
$stmt->bindParam(':användarnamn', $användarnamn, PDO::PARAM_STR);
$stmt->bindParam(':lösenord', $lösenord, PDO::PARAM_STR);
$stmt->execute();
catch(PDOException $e)
echo $e;
?>
/斯万特
【问题讨论】:
如果使用不带重音符号的字符,是否还会出现此错误? 你在这里吗? $stmt->bindParam(':epost', $epost, PDO::PARAM_STR); $stmt->bindParam(:epost, $epost, PDO::PARAM_STR);这就是手册所说的: $sth->bindParam(':calories', $calories, PDO::PARAM_INT); 哦,对不起。消息后做了一些更改。我编辑主要问题。它在第 28 排场外。 请将您的问题edit 发送至:澄清问题标题、更多细节或澄清问题、改进文本排列、改进代码格式。见How to Ask 请浏览here和here 【参考方案1】:可能值得尝试一个简化版本,省略 PHP 变量中的特殊字符和分配的占位符。
<?php
require_once('dbhandler.php');
$dbh = new DBHandler();
$e = 'svante@telia.com';
$n = 'Svante';
$a = 'Poffe';
$l = '1596';
$sql = "INSERT INTO users( `epost`, `namn`, `användarnamn`, `lösenord` ) VALUES( :e, :n, :a, :l )";
$stmt = $dbh->getInstance()->prepare($sql);
$stmt->bindParam(':e', $e, PDO::PARAM_STR);
$stmt->bindParam(':n', $n, PDO::PARAM_STR);
$stmt->bindParam(':a', $a, PDO::PARAM_STR);
$stmt->bindParam(':l', $l, PDO::PARAM_STR);
$stmt->execute();
【讨论】:
谢谢 Abronsius 教授。它就像一个魅力。我有我介意的,但被其他东西冲昏了头脑。它是用英语写的,之前女巫是“尽力而为”的方式,但是变量“名称”确实以错误的方式连接起来,而我用的是瑞典语。 ;-) :-) 好~很高兴它有帮助 顺便说一句,你可以在 catch 中回显 $e,更不用说根本不应该没有 catch 块 @YourCommonSense 你可以吗?那时我已经预料到它是一个对象的错误!我对你评论中的双重否定感到困惑shouldn't be no catch blocks
~ 你的意思是不应该有 catch 块吗??
是的,这是一个双重否定,不应该有 catch 块。如果您看一下您回答的问题,就会发现“不可能”echo $e
提供的输出以上是关于PDOException:SQLSTATE [HY093] [重复]的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE [HY000] [2002] 连接被拒绝 - 原因:PDOException [重复]
PHP PDOException:“SQLSTATE [HY093]:无效参数号”
Symfony 错误:[PDOException] SQLSTATE[HY000] [2002] 没有这样的文件或目录
Symfony 2.8(Wamp):[Doctrine\DBAL\Exception\ConnectionException] PDOException:SQLSTATE[HY000] [2002]
Laravel 5.0 [PDOException] SQLSTATE[HY000]:一般错误:1215 无法添加外键约束