我正在尝试运行一个语句来创建一个数据库和一个用户,但似乎laravel继续运行奇怪的查询。我的代码如下:
$res = DB::statement("CREATE DATABASE IF NOT EXISTS `?`", array($databaseName));
$res2 = DB::statement("CREATE USER '?'@'%' IDENTIFIED BY '?'", array($databaseName, $password));
return $res . " - " . $res2;
我希望创建数据库,并且" true"结果,但查询仍然给我一个错误的响应,没有创建数据库。尝试在查询中使用$ databaseName变量以“脏的方式”运行语句"工作,所以我认为准备好的陈述有问题。这是正确的方法吗?
谢谢! :)
更新: 我设法做到了,但似乎仍然存在SQL注入问题,因为我仍然无法使用预准备语句。我发现的第一个解决方案如下:
$res = DB::statement("CREATE DATABASE IF NOT EXISTS `{$databaseName}`");
$res2 = DB::statement("CREATE USER '{$databaseName}'@'%' IDENTIFIED BY '{$password}'");
return $res . " - " . $res2;
答案 0 :(得分:0)
以下是我发现有效的代码:
DB::connection('database')->statement("CREATE USER '{$mysqlDatabaseName}'@'%' IDENTIFIED BY '{$mysqlUserPassword}'");
DB::connection('database')->statement("CREATE DATABASE IF NOT EXISTS `{$mysqlDatabaseName}`");
DB::connection('database')->statement("GRANT ALL PRIVILEGES ON `{$mysqlDatabaseName}`.* TO '{$mysqlDatabaseName}'@'%'");
但是,在运行这些查询之前,必须确保代码中没有SQL注入。
希望这会对别人有所帮助! :)