我想運行一個語句來創建一個數據庫和一個用戶,但它似乎laravel繼續運行奇怪的查詢。我的代碼如下:如何準備與Laravel語句
$res = DB::statement("CREATE DATABASE IF NOT EXISTS `?`", array($databaseName));
$res2 = DB::statement("CREATE USER '?'@'%' IDENTIFIED BY '?'", array($databaseName, $password));
return $res . " - " . $res2;
我預計要創建的數據庫和一個「真」的結果,但查詢還是給了我一個錯誤的響應,沒有創建數據庫。試圖用「髒方式」在查詢內部運行一個帶有$ databaseName變量的語句,所以我認爲準備語句有問題。這將是正確的做法嗎?
謝謝! :)
更新: 我設法做到了,但它似乎仍然存在SQL注入問題,因爲我仍然無法使用預準備語句。我發現的第一個解決方案是以下之一:
$res = DB::statement("CREATE DATABASE IF NOT EXISTS `{$databaseName}`");
$res2 = DB::statement("CREATE USER '{$databaseName}'@'%' IDENTIFIED BY '{$password}'");
return $res . " - " . $res2;
我相信你的綁定是自動引用的,所以可能有可能你剛剛創建了數據庫''db_name''並帶有引號。那個創建了嗎? – user3158900
不是在這種情況下,而是使用變量(如\'?\')您是對的:它們被引用並且生成的查詢導致數據庫名稱格式錯誤。 例如: 'DB ::聲明( 「CREATE USER @ '%' IDENTIFIED BY '?' '?'」,數組($的databaseName,$ databasePassword));' 是不是有辦法修理它? –