PHP'nin PDO yöntemi başarısız hazırlayın bir döngü içinde iken

2 Cevap php

Aşağıdaki kodu verildi:

// Connect to MySQL up here

$example_query = $database->prepare('SELECT * FROM table2');
if ($example_query === false) die('prepare failed');

$query = $database->prepare('SELECT * FROM table1');
$query->execute();
while ($results = $query->fetch())
{
    $example_query = $database->prepare('SELECT * FROM table2');
    if ($example_query === false) die('prepare failed'); //it will die here
}

Açıkçası iki tablo2 SELET her şeyi tablolarını girişimi. İkinci bir (WHILE'nden de bir), her zaman başarısız olur ve bir hata neden olur.

Bu yerde ayarlama çeşit olmalı yani hiçbir sorunları var Yerel olarak geliştirme, sadece benim üretim sunucusunda olduğunu.

Benim acil düşünce MySQL o 1'e ayarlandığında ayarı max_connections çeşit vardır ve WHILE döngü böylece tamamlanana kadar dışarı "hayır çok fazla zaten bağlı" ve palavra diyor yeni bir sorgu hazırlamak için çalıştığınızda bir bağlantısı açık tutulacaktır olduğunu .

Herhangi bir fikir?

EDIT: Evet ben sadece WHILE'nden hazırlanan alır benim gerçek kod, iki kez yapmak gerek yok biliyorum, ama dediğim gibi bazı testlerden sonra ben keşfettim ki benim üretim sunucusuna başarısız söyledi basit SEÇİN * sorgusu ama bunun dışında WHILE'nden başarısız. Ben verdim örnek kod, sadece sorunu göstermek için tabii ki çok sulanan aşağı olduğunu.

2 Cevap

Problem bir tamponsuz sorgu (bu WHILE'nden içinde olduğu) çalışırken ben bir şey yapamam ki oldu

Çözüm buffered sorgular kullanılmaya başlandı sağlamak için aşağıdaki satırı eklemek için oldu:

$database->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);

Bir kereden daha fazla $ example_query hazırlamak için bir ihtiyaç olmamalıdır. Sadece döngü içinde sorguyu yürütmek.

EDIT: Eğer döngünün sonunda her döngü tekrarında yeni bir sorgu, bir açık $ example_query-> closeCursor () hazırlamak gerekir deyim nesnesi ile ilişkili tüm kaynakları boşaltır olursa.