PHP MySQLi Çoklu Uçlar

2 Cevap php

Hazırlanan tablolar birden DEĞERLERİ normal bir mysql_query olarak aynı işe merak ediyorum.

INSERT INTO table (a,b) VALUES ('a','b'), ('c','d');

VS

$sql = $db->prepare('INSERT INTO table (a,b) VALUES (?, ?);

Ben bir döngü içinde hazırlanmış deyimi kullanırsanız, orada kod ilk parça olur, ya da bir değere sahip bir döngü içinde her zaman kodunun ilk parça koşma gibi sadece gibi çalışması için arka planda ekleme optimize MySQL ?

2 Cevap

Ben önde gitti ve bir sorgu hazırlanmış deyimi kullanır ve diğer o yürütür sonra tüm sorgusu oluşturur test koştu. Ben muhtemelen anlamak kolay bilmek isteyen kulüpler ne yapmıyorum.

İşte benim test kodu. I) tür bir $ deyim-> yakın (kadar yürütme geri düzenlenen hazırlanmış deyimleri düşünüyordum bunu falan optimize etmek için çağrıldı. Bu real_escape_string kullanarak sorgusu oluşturur testi olarak en az 10 kat daha hızlı olsa durum görünmüyor.

<?php

$db = new mysqli('localhost', 'user', 'pass', 'test');

$start = microtime(true);
$a = 'a';
$b = 'b';

$sql = $db->prepare('INSERT INTO multi (a,b) VALUES(?, ?)');
$sql->bind_param('ss', $a, $b);
for($i = 0; $i < 10000; $i++)
{
    $a = chr($i % 1);
    $b = chr($i % 2);
    $sql->execute();
}
$sql->close();

echo microtime(true) - $start;

$db->close();

?>

Eğer bir döngü içinde hazırlanmış deyimi kullanırsanız, bunun nedeni sadece hazırlanmış deyimi ile bir kez yapılması gereken analiz ham sorgu her zaman çalışan daha verimli olacaktır. Yani hayır, bu ölçüde, aynı değildir.