bir açıklamada muliple sorguları mysql

4 Cevap php

Ben benzer bir soru için stackoverflow etrafında baktım, ama benim aradığım tam olarak ne bulamadım, bu yüzden buraya. Myphpadmin size bir açıklamada Mulitple sorguları olabilir ve bu, örneğin, sizin için yürütür: '

UPDATE `test` WHERE `test2` = 4;
UPDATE `test` WHERE `test4` = 8;
UPDATE `test` WHERE `test8` = 1;

PHP böyle bir şey yapmaya çalışırsanız Şimdi, hiç çalışmıyor. örneğin:

 $test = 'UPDATE `test` SET `value` = "123" WHERE `test2` = 4;
             UPDATE `test` SET `value` = "321" WHERE `test4` = 8;
             UPDATE `test` SET `value` = "533" WHERE `test8` = 1;';
    mysql_query($test);

Verir ve hata:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; UPDATE test SET value = "123" WHERE test2 = 4; UPDATE test SE' at line 1

O bir açıklamada, diyelim ki, yukarıdaki gibi birden sorguları birleştirmek bile mümkün mü? (Bunun arkasındaki mantık muhtemelen çok kötü, ama ben bu yüzden bunu yapmak için daha iyi bir yolu varsa bana bildirin lütfen, çok MySQL deneyimi yok): Ben şu durumda bunu yapmak istiyor

Kez çift üzerinde şu döngüler:

function SaveConfig($name, $value)
{
    	global $sql_save_query;
    $sql = 'SELECT * FROM `config` WHERE `name` = "'.$name.'"';
    $res = mysql_query($sql);

    if($res)
    {
        $sql_save_query .= 'UPDATE `config` SET value = "'.$value.'" WHERE `name` = "' .$name. '"; '."\n";
    }
    else
    {
    		$sql_save_query .= 'INSERT INTO `config`(`id`,`name`,`value`) VALUES("","' .$name. '","' .$value. '"); '."\n";
    }
}

Döngü bittikten sonra sonra çalışır:

mysql_query($sql_save_query);

hangi bir hata veriyor:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; UPDATE config SET value = "" WHERE name = "fcolour2"; UPDATE config SE' at line 1

Şimdi (aklımda) benim diğer seçenek sadece bir anda, her döngü sonra bir sorgu, bir SQL sorgusu çalıştırmak için. Ama bu kötü / yavaş / kötü bir uygulama olmaz mı?

Teşekkürler!

4 Cevap

php API (Ben senin oturum açma komut '; UPDATE users SET admin=1 WHERE username='hacker' geçerse ne olacağını düşünmek kodunuzu bir SQL injection saldırı olasılığını azaltmak için tek bir çağrı birden sorgular yayınlamasını yasaklıyor adı gibi). Sen (sizin durumunuzda mümkün değildir) çoklu ifadeleri çalıştırmak, ya da tek bir deyimi içine tabloların mantığını sarmak ya gerekir.

Sizin örnekte var döngü bir mimari problemin göstergesidir.

O zaman hiç seçme gerekmez - - varolan bir kaydı ile ilgili ise, birincil anahtar geçmek sadece bir güncelleştirme deyimini çalıştırabilirsiniz.

Eğer yeni bir kayıt ile ilgili iseniz, herhangi bir tuşa geçmek - o zaman bir ekleme deyimini çalıştırmak için biliyorum.

Bu mysql_query kullanarak birden sorguları yürütmek mümkün değildir.

Bunu bir kez bu sözdizimini kullanarak aynı anda birden ekler gerçekleştirebilirsiniz:

INSERT INTO table (col1, col2) VALUES (0, 1), (2, 3), (4, 5); -- Insert 3 rows

Genel olarak daha az sorgular = daha iyi ama güncellemeleri sadece bunları yapmak zorundayız.

muhtemelen kullanmak INSERT ... ON DUPLICATE KEY UPDATE olabilir

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

Diğer bazı faydalı bağlantılar

http://dev.mysql.com/doc/refman/5.0/en/replace.html

http://www.mysqlperformanceblog.com/2007/01/18/insert-on-duplicate-key-update-and-replace-into/