【问题标题】:Create User with MySQLi Prepared Statement使用 MySQLi Prepared Statement 创建用户
【发布时间】:2011-08-31 13:59:18
【问题描述】:

我有一个使用 PHP 和 MySQLi 以及准备好的语句的脚本。目的是在 MySQL 服务器上创建一个新用户,但是准备语句失败,没有更多信息说明原因。

$query = 'CREATE USER ?@`10.1.1.%` IDENTIFIED BY ?;';

if ($stmt = $newdb->prepare($query)) {
$stmt->bind_param('ss', $db_username, $db_password);

    if ($stmt->execute()) {
    // Database user created successfully
    } else {
    die(errorJSON('db', 'create', 22));
}

$stmt->close();
} else {
    die(errorJSON('db', 'create', 3));
}

任何想法为什么执行此语句会失败?

谢谢。

【问题讨论】:

  • 请包含来自 mysql 的错误 -- php.net/manual/en/mysqli.error.php
  • 嗨!你能给我们更多的信息:这个脚本在哪里失败了?什么是错误类型(php 或 mysql)?失败后回显 $stmt->error 会得到什么?
  • 我遇到了完全相同的问题,准备该语句失败,我不知道,为什么:mysql> PREPARE stmt1 FROM 'CREATE USER ?由 ?' 识别; ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '? 附近使用的正确语法。由?在第 1 行

标签: php mysqli prepared-statement


【解决方案1】:

在测试查询的成功/失败时,您应该打印$stmt->error(以及可选的$stmt->errno)。例如:

if ($stmt->execute()) {
        // Database user created successfully
    } else {
        errorJSON('db', 'create', 22)
        die($stmt->error);
    }

以上是一个非常糟糕的示例 - 可能我已经搞砸了您的错误报告本身的逻辑 - 但这是您检索错误并打印/记录它的方式。

【讨论】:

  • 这不是问题的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
相关资源
最近更新 更多