PHP altında mysql_query bir engelleme fonksiyonu var mı?

5 Cevap php

I mysql_query kullanarak sunucu üzerinde birden sorguları yürütme ediyorum varsayalım. Her sorgu sonuçları sonraki sorguyu etkiler. Her çağrı mysql_query tamamen diğerine kontrol hareket etmeden önce idam edilecek?

Edit: Ben bir işlem depolama motoru kullanarak değilim, söylemeyi unuttum.

5 Cevap

Evet, MySQL sunucu veri döndürmek ve PHP sonraki eylem ilerleme önce sorguyu tamamlamak, bu dönüş değeri atama veya kod sonraki satıra ilerliyor olması gerekir.

mysql_query( "INSERT INTO y VALUES (x,1)" );
mysql_query( "SELECT x FROM y WHERE z=1" );
mysql_query( "UPDATE y SET x=x+1 WHERE z=1" );
mysql_query( "SELECT x FROM y WHERE z=1" );

x sonra 2, 1 olacaktır ve dördüncü ifadeye 2 zaman komut dosyası iade edilecektir. Bu tek bir PHP komut dosyası paralel sorguları çalıştırmak mümkün değildir - bu başka bir dilde (yani Java) paralel yürütülmesine veya parçacığı gerektirir.

Aynı script ve iplik, evet. Diğer PHP Diğer sorguları aynı anda çalışıyor olabilir, ama php script tüm sorgular engeller.

Her zaman geçmeden önce dönüş değeri değerlendirmek mümkün olacaktır.

Diğerleri zaten söylediğim gibi, PHP diş çekme için hiçbir açık desteği ile sıralı dil (yani bir deyim sonraki sonra idam edilecektir) 'dir. Ne Ancak yapabilirsiniz (mysql_query gibi bütün satırlar için bekliyor aksine) döndürülen sonucu ilk satıra kadar tek blok, hangi mysql_unbuffered_query kullanmaktır.

Bu orijinal soruyu cevaplamak değil, soru başlığı ile ilgilidir:

Olmayan engelleme istiyorsanız, çalışan bir yarı-seçenek var:

  1. ınsert'ler için sadece
  2. sadece MyISAM, BELLEK, ve ARŞİV tablolar için
  3. bu uç üzerindeki olası bazı / havai performans kaybı var

Bu sizin sorguda INSERT GECİKMİŞ sözdizimini kullanmak bulunuyor. Sonra, PHP sadece "OK" yanıt mysql için bekleyecek ve gerçek insert gerçekleşmesi için beklemek olmaz.

http://dev.mysql.com/doc/refman/5.0/en/insert-delayed.html

Eğer işlemleri kullanmadığınız zaman, MySQL olursa olsun kullanılan programlama dili, anında her sorgu taahhüt edecektir. Yani evet, sizin sorguları ardışıklığının güvenebilirsiniz.