私のアプリケーション(PHP)では、APIから約3000行をリクエストし、PDOドライバを使用してこれらをMySQLテーブルに挿入します。PHP、PDO、MySQL - 複数のINSERTがインジェクションに脆弱ですか?
挿入するデータはユーザーの入力ではありませんが、データがどのように私に渡されるのかは私の手元にありません。
〜3000の挿入ができるだけ速くなることが重要なので、私は(?,?,?),(?,?,?),...
のように複数の挿入を使用したいと思います。
複数の挿入を実行してMySQLインジェクションの脆弱性に影響するかどうか疑問に思っていましたか?なぜなら私はPHPコードを使ってクエリをビルドしているからです。
マイ 'テスト' コードは、次のとおり
<?php
class DBCon {
private static $instance = null;
private $db;
private function __construct() {
$this->db = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'root', '');
$this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public static function getDB() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance->db;
}
}
function createItems($array) {
$sql = 'INSERT INTO `table`(`text`, `int`, `bool`) VALUES ';
$insertArray = array();
foreach ($array as $arrayItem) {
$sql .= '(';
foreach ($arrayItem as $arrayItemItem) {
array_push($insertArray, $arrayItemItem);
$sql .= '?,';
}
$sql = rtrim($sql, ',');
$sql .= '),';
}
$sql = rtrim($sql, ',');
var_dump($sql);
var_dump($insertArray);
try {
$query = DBCon::getDB()->prepare($sql);
$query->execute($insertArray);
} catch (PDOException $e) {
echo '<br/><br/>query failure';
}
}
$array = array(array('a piece of text',123,0),array('a piece of text',123,0));
createItems($array);
$sql
が含ま:
index.php:36:string 'INSERT INTO `table`(`text`, `int`, `bool`) VALUES (?,?,?),(?,?,?)' (length=65)
$insertArray
が含ま:
index.php:37:
array (size=6)
0 => string 'a piece of text' (length=15)
1 => int 123
2 => int 0
3 => string 'a piece of text' (length=15)
4 => int 123
5 => int 0
Btw、エラーを報告して報告する必要はありません。代わりに、PHPがそれを処理するようにしてください。つまり、try catchを取り除くだけです。 –