Uygulamamda (PHP) bir API'den ~ 3000 satır talep edip bunları PDO sürücüsünü kullanarak bir MySQL tablosuna yerleştireceğim.PHP, PDO, MySQL - Çoklu INSERT enjeksiyona karşı hassas mı?
Eklenecek veriler kullanıcı girişi olmamasına rağmen, verilerimin bana nasıl verildiği elimden çıkar.
~ 3000 kesici uçların olabildiğince hızlı gitmesi önemlidir, bu yüzden (?,?,?),(?,?,?),...
gibi çoklu bir ek kullanmak istiyorum.
Birden çok ekleme yapmanın MySQL enjeksiyonunun güvenlik açığı üzerinde bir etkisi olup olmadığını merak ediyordum? Çünkü PHP kodunu kullanarak sorguyu yapıyorum.
Benim 'test' kod şudur:
<?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
içerir:
index.php:36:string 'INSERT INTO `table`(`text`, `int`, `bool`) VALUES (?,?,?),(?,?,?)' (length=65)
$insertArray
içerir:
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, bunları raporlamak için hata yakalamamalısınız. Bunun yerine, PHP'nin bunu ele almasına izin verin. Diğer bir deyişle, sadece yakalamayı deneyin. –