SQLSTATE [42000]:语法错误或访问冲突 - PDO" GRANT"准备好的声明

时间:2014-05-12 01:20:01

标签: php mysql sql pdo

我正在尝试使用PDO创建一个准备好的语句,这将允许我使用从表单收集的数据创建mysql用户。 当我运行命令时,我收到错误:

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在'选择'选择'之后使用正确的语法。 ON' testjoke.authors' TO' corey' @' localhost''在第1行

我目前只使用我为测试创建的一些变量的数据,而不是表单中的数据。 代码如下所示:

$grantQuery = $db->prepare("GRANT ? ON ? TO ?@'localhost';");

    $select = 'select';
    $testjoke = 'testjoke.authors';
    $pdoemail = 'corey';

    $grantQuery ->execute(array(
                                $select,
                                $testjoke,
                    $pdoemail
                ));

我启用了Mysql常规日志记录,查询甚至从未显示(从未执行过)。

我一直试图找到一个解决方案,但是我没有运气。

非常感谢任何帮助。

由于 科里

1 个答案:

答案 0 :(得分:2)

就像你不能写SELECT ? FROM ?一样,你也不能将GRANT划分为准备好的查询。

准备好的查询值只能是值。出于安全原因,您无法传递关键字。在您的情况下,可能的唯一参数是用户名,因为它是一个字符串。

PDO正在尝试运行:

GRANT 'select' ON 'testjoke.authors' TO 'cory':'localhost';

你可以看到为什么这不会起作用,我希望。