如何用Laravel编写语句

时间:2014-07-15 11:44:11

标签: database laravel prepared-statement sql-injection

我正在尝试运行一个语句来创建一个数据库和一个用户,但似乎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;

1 个答案:

答案 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注入。

希望这会对别人有所帮助! :)