【问题标题】:Unable to compare valuesfrom mysql in a prepared statement无法在准备好的语句中比较来自 mysql 的值
【发布时间】:2011-01-31 00:10:56
【问题描述】:

我似乎无法让它连接到数据库,以便我可以运行我准备好的语句。有人知道我忘记了什么吗?

private function check_credentials($plain_username, $password)
    {
    global $dbcon;

    $ac = new ac();
    $ac->dbconnect();
    $userid = $dbcon->prepare('SELECT id FROM users WHERE username = :username AND password = :password LIMIT 1');
    $userid->bindParam(':username', $plain_username);
    $userid->bindParam(':password', $password);
    $userid->execute();

    $id = $userid->fetch();
    Return $id;
    }

编辑:我将 SQL 查询从 SELECT FROM 查询更改为 INSERT INTO 查询并且它有效。到底是怎么回事?

【问题讨论】:

  • 你的errorInfo()在说什么? php.net/manual/en/pdo.errorinfo.php 无论如何你都需要某种错误处理,你不觉得吗? ...今天早些时候我们没有进行过这种交流吗?
  • 致命错误:在 E:\PortableApps\xampp\htdocs\SN\AC\ACclass.php 中出现消息 'SQLSTATE[HY093] 的未捕获异常 'PDOException':无效参数号:未绑定参数' :61 堆栈跟踪:#0 E:\PortableApps\xampp\htdocs\SN\AC\ACclass.php(61): PDOStatement->execute(Array) #1 E:\PortableApps\xampp\htdocs\SN\AC\ACclass .php(34): ac->check_credentials('joe', '94a02c32b6ff629...') #2 E:\PortableApps\xampp\htdocs\SN\UI\UIclass.php(17): ac->authentication() #3 E:\PortableApps\xampp\htdocs\SN\index.php(4): ui->start() #4 {main} 在 E:\PortableApps\xampp\htdocs\SN\AC\ACclass.php 中抛出第 61 行
  • @pekka 相同的功能,不同的问题。摆脱了另一个问题,因为我意识到我问错了问题,这让人们失望了
  • @Cortopasta 我明白了。奇怪的。准备工作看起来不错,但是“没有绑定参数”说得很清楚。也许比我更有 PDO 经验的人可以告诉你更多。
  • 我不知道 ac() 是什么,但是,我认为这段代码唯一明显错误的是“Return”应该是“return”。

标签: php mysql oop pdo prepared-statement


【解决方案1】:

重新格式化堆栈回溯:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: no parameters were bound' in E:\PortableApps\xampp\htdocs\SN\AC\ACclass.php:61
Stack trace:
#0 E:\PortableApps\xampp\htdocs\SN\AC\ACclass.php(61): PDOStatement->execute(Array)
#1 E:\PortableApps\xampp\htdocs\SN\AC\ACclass.php(34): ac->check_credentials('joe', '94a02c32b6ff629...')
#2 E:\PortableApps\xampp\htdocs\SN\UI\UIclass.php(17): ac->authentication()
#3 E:\PortableApps\xampp\htdocs\SN\index.php(4): ui->start()
#4 {main} thrown in E:\PortableApps\xampp\htdocs\SN\AC\ACclass.php on line 61

您是否有任何理由在 check_credentials 函数中实例化一个新的 ac 对象?鉴于 check_credentials 已经是 ac 的一个方法,这似乎很奇怪。 dbconnect 是否会覆盖全局 dbcon

【讨论】:

  • 老实说,我没有理由这样做,只是我认为它是这样工作的。让我改变它,看看它是否有效
  • 我能建议的只是每一步之后的 var_dump/print_r $dbcon 和 $userid,看看里面是否有什么时髦的东西出现。
猜你喜欢
  • 1970-01-01
  • 2011-08-27
  • 2011-09-16
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多