【问题标题】:Fatal error: Call to undefined method PDO::bindparam()致命错误:调用未定义的方法 PDO::bindparam()
【发布时间】:2016-03-28 04:18:28
【问题描述】:
$txtEmail = $_POST['txtEmail'];
$txtPassword = $_POST['txtPassword'];

echo $txtEmail."<br>";
echo $txtPassword."<br>";

$DBH->prepare("SELECT * FROM adm_login_info WHERE cEmail=$txtEmail AND cPassword=$txtPassword AND cLoginStat=1 AND cLock=0 ");
$STHA->bindparam(":txtEmail",$txtEmail);
$STHA->bindparam(":txtPassword",$txtPassword);
$STHA->execute();

我需要你的帮助,我正在努力解决这个问题。如果我错过了什么,请检查我的代码。

【问题讨论】:

  • 您在哪里创建连接,请分享或在哪里初始化 PDO,例如 $DBH = new PDO('dblib:host=' . $serverUrl . ';dbname=' . $serverDb, $serverUser, $serverPass);

标签: php pdo


【解决方案1】:

bindParam 是 PDO 语句的一种方法,但您正试图将它与未定义变量 $STHA 一起使用。

使用您的数据库处理程序(在您的情况下为$DBH-&gt;prepare(...))准备一个 SQL 查询会返回一个 PDO 语句。您必须使用它来绑定参数并执行查询:

$STHA = $DBH->prepare(...); // prepare returns a "statement"
$STHA->bindParam(...); // use the statement to bind your parameters
// ...
$STHA->execute()

还要注意bindParam 是用大写字母 P 书写的。

更新:你也没有在你的 SQL 查询中使用你的命名参数,你只是在使用你的 PHP 变量。改用命名参数:

$DBH->prepare("SELECT * FROM adm_login_info 
WHERE cEmail = :txtEmail 
AND cPassword = :txtPassword AND cLoginStat=1 AND cLock=0 ");

【讨论】:

  • 我应该怎么做才能使它正确?如何使用 $STHA 作为定义变量? tnx
  • 操作码的安全问题大家可以多说几句
  • @low_rents 致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取正确的语法,以便在 C:\xampp\htdocs\web_final_exam\login 中的 '@sample.com AND cPassword=123 AND cLoginStat=1 AND cLock=0' at line 1' 附近使用.php:18 堆栈跟踪:#0 C:\xampp\htdocs\web_final_exam\login.php(18): PDOStatement->execute() #1 {main} 在 C:\xampp\htdocs\web_final_exam\login.php 中抛出在第 18 行
  • 我试过你说的,但似乎我有访问冲突:1064
  • @fabio 这不是 OP 问题的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 2015-01-28
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多