我正在尝试创建一个简单的PHP脚本来创建属性并将其分配给SQL用户。如果未使用任何参数,则查询工作正常,否则将失败。
工作正常
$conn = new mysqli('127.0.0.1', 'root', 'pass');
$sql = "CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'";
$stmt = $conn->prepare($sql);
$stmt->execute();
用户名和密码都?
$conn = new mysqli('127.0.0.1', 'root', 'pass');
$sql = "CREATE USER '?'@'localhost' IDENTIFIED BY '?'";
$stmt = $conn->prepare($sql);
$uname = "carn";
$pass = "pass";
$stmt->bind_param('ss', $uname, $pass);
$stmt->execute();
用户名和密码都是?
$conn = new mysqli('127.0.0.1', 'root', 'pass');
$sql = 'CREATE USER "?"@"localhost" IDENTIFIED BY "?"';
$stmt = $conn->prepare($sql);
$uname = "carn";
$pass = "pass";
$stmt->bind_param('ss', $uname, $pass);
$stmt->execute();
语法错误,请查看文档
$conn = new mysqli('127.0.0.1', 'root', 'pass');
$sql = "CREATE USER ?@'localhost' IDENTIFIED BY ?";
$stmt = $conn->prepare($sql);
$uname = "carn";
$pass = "pass";
$stmt->bind_param('ss', $uname, $pass);
$stmt->execute();
语法错误,请查看文档
$conn = new mysqli('127.0.0.1', 'root', 'pass');
$sql = "CREATE USER `?`@'localhost' IDENTIFIED BY `?`";
$stmt = $conn->prepare($sql);
$uname = "carn";
$pass = "pass";
$stmt->bind_param('ss', $uname, $pass);
$stmt->execute();
我不知道从这里去哪里。这可能是我使用引号的方式的问题,我在 SO 上看到了两个相关问题,但没有一个正确回答。
使用预准备语句,您只能使用有限的查询子集。不包括创建用户。
您可以尝试插入到mysql.user
表中,例如
INSERT INTO `mysql`.`user` (Host,User,Password)VALUES(?,?,password(?));
此外,动态创建用户时,您做错了什么
不要在
?
两边加上单引号,bind_param() 会处理好它。
但是,还有一个问题,即不能在 MySQL 中对CREATE USER
语句使用占位符。
请参阅如何使用MySQL准备的语句编写"创建用户?"以获取执行此操作的方法。