【问题标题】:mysql prepared statements, trouble understanding how it worksmysql准备好的语句,很难理解它是如何工作的
【发布时间】:2010-12-17 21:59:26
【问题描述】:

我正在尝试使用准备好的语句,但无法使其成功运行。 这是我的代码:

 function addAlbum($album){
        $connection = mysqli_connect(HOST,USER,PASS,DATABASE);
        /*$sql = 'INSERT INTO `'.TABLE_ALBUMS.'` (albumName) VALUES ("'.$album.'")';
        $result = mysqli_query($connection,$sql);*/
        $stmt = $dbh->prepare('INSERT INTO `'.TABLE_ALBUMS.'` (albumName) VALUES ("'.$album.'")');
        $stmt->bindParam(':albumName', $album);
        $result = $stmt->execute();

        if($result){
            header("Location: index.php?success");
        } else {
            header("Location: index.php?fail");
        }

    }

我在 Firefox 中运行了这个,但出现错误,这就是我得到的:

致命错误:调用未定义的方法 mysqli_stmt::bindParam() 在 /Applications/MAMP/htdocs/PHPproject/includes/functions.inc.php 第 16 行

谁能告诉我哪里出错了?

非常感谢

【问题讨论】:

  • 我们是否应该假设您的脚本输出Nooooo
  • 你在使用谷歌浏览器吗?谷歌浏览器无法正确显示所有错误,因此请使用 firefox。您还应该在 php 中启用错误输出
  • 谢谢,好的,我已经更新了帖子以显示我在运行我的函数时遇到的致命错误。
  • 我编辑了我的答案。检查正确的函数名称。
  • php.net 网站 bindParam,当它是 bind_param。感谢您的帮助。

标签: php mysql prepared-statement


【解决方案1】:

bind 的第一个参数应该是变量的类型:

$stmt->bind_param("s", $album);

您还应该检查execute() 的返回值,而不是$stmt

$result = $stmt->execute();
if($result){
  echo "yes";
}
else {
  echo "no";
}

我还要说,每次插入内容时都准备语句不是一个好主意。准备好的语句应该是类变量,或者如果您不在 oop 中,则应该是全局变量,因此您不必在每次调用函数时都准备语句。只需编写一个函数init(),它将准备您将使用的所有语句。

【讨论】:

  • 感谢您的建议,我似乎仍然无法运行它,我检查了 PDO 是否安装在我的 php.ini 文件中,并且它没有被注释掉。
  • 我已经编辑了我的帖子以显示我得到的最新功能和浏览器错误。
猜你喜欢
  • 2010-09-08
  • 2013-10-19
  • 2015-07-09
  • 2011-09-16
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多