【问题标题】:php,mysql prepared statementsphp,mysql 准备好的语句
【发布时间】:2010-12-17 23:32:13
【问题描述】:
function addAlbum($album){
        $connection = mysqli_connect(HOST,USER,PASS,DATABASE);
        $stmt = mysqli_prepare($connection,'INSERT INTO `'.TABLE_ALBUMS.'` (albumName) VALUES (":album")');
        mysqli_stmt_bind_param($stmt,':album');
        $result = mysqli_stmt_execute($stmt);

            if($result){
                return true;
            } else {
                return false;
            }

    }

我得到这个错误:

mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: Number of elements in type definition string doesn't match number of bind variables

任何帮助将不胜感激。

【问题讨论】:

  • 这次 $connection->prepare() 不起作用。我猜想如果你在准备行之后var_dump($stmt),你会得到一个false
  • 是的,它返回 false,任何想法为什么?
  • 可能你的sql语句没有准备好?你检查错误了吗?
  • 如果结果为假,它肯定会失败。就像 Jeremy 指出的那样,只需检查错误即可。

标签: php mysql prepared-statement


【解决方案1】:

你已经混合了程序风格和面向对象的风格

所以,要么完全使用程序风格,要么反之

$sql        = 'INSERT INTO '.TABLE_ALBUMS.' (albumName) VALUES (?)';
$connection = mysqli_connect(HOST,USER,PASS,DATABASE); <- procedural style
$stmt       = mysqli_prepare($connection, $sql);       <- procedural style
mysqli_stmt_bind_param($stmt, 's', $album);            <- procedural style
$result     = mysqli_stmt_execute($stmt);              <- procedural style
... 

【讨论】:

  • 好吧,这是有道理的,我现在收到警告,我已经编辑了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 2016-09-10
  • 2011-09-16
  • 2015-06-27
  • 1970-01-01
  • 2012-12-18
相关资源
最近更新 更多