首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqli_prepare()返回NULL,因为它不识别'?‘

mysqli_prepare()返回NULL,因为它不识别'?‘
EN

Stack Overflow用户
提问于 2014-01-10 00:17:01
回答 1查看 788关注 0票数 0

我有下面的代码。

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

代码语言:javascript
复制
if ( mysqli_connect_errno() )
{
    printf("Connect failed: %s\n", mysqli_connect_errno() );
    exit();
}

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

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

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

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

“创建数据库myDB”

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

我已经在手册和论坛上看过了,还没有回答。有人知道为什么mysqli_prepare没有返回适当的值吗?

mysqli的版本为5.0.8,我的php版本为5.3.15。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-10 00:22:41

准备好的语句不接受任何作为MySQL标识符的占位符。这包括数据库、表和列名。您应该简单地将表名的经过消毒的版本连接到语句中,并使用mysqli_query()

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

如果您尝试准备一个语句,其中包括一个MySQL实体,比如一个未知的表,那么MySQl就无法创建执行计划。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21033940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档