mysqli_prepare()返回NULL,因为它无法识别'?'

时间:2014-01-10 00:17:02

标签: php variables mysqli null return

我有以下代码。

`$ db = mysqli_connect('localhost','zyk','nuithadit6-6-6','phpAdv');

if ( mysqli_connect_errno() )
{
    printf("Connect failed: %s\n", mysqli_connect_errno() );
    exit();
}

    $thisDB = mysqli_prepare($db, "CREATE DATABASE ?");
    echo mysqli_stmt_error($thisDB);;`

运行此代码时,我收到以下警告:

PHP警告:mysqli_stmt_error()要求参数1为mysqli_stmt,布尔值在第13行的/Library/WebServer/Documents/phpAdvanced/cap1/createDB.php中给出。

如果我将mysqli_prepare函数的第二个参数更改为以下内容:

“创建数据库myDB”

然后警告就消失了。当查询字符串中包含变量时,似乎mysqli_prepare不喜欢它,当我以这种方式使用它时,它会为$ thisDB返回NULL。据我了解,这不是预期的行为。

我一直在阅读手册和论坛,但仍然没有答案。有谁知道为什么mysqli_prepare没有返回适当的值?

mysqli的版本是5.0.8,而我的php版本是5.3.15。

1 个答案:

答案 0 :(得分:0)

预备语句不接受任何MySQL标识符的占位符。这包括数据库,表和列名称。您只需将表名的已清理版本连接到语句并使用mysqli_query()

原因是:MySQL将在准备时解析准备好的语句并准备完整的执行计划。这包括它将使用哪些表,哪些索引以及它将如何从列中进行选择。执行语句时,它会将变量数据替换为执行计划并创建结果。

如果您尝试准备包含MySQL实体(如表格未知)的语句,MySQl将无法创建执行计划。