2015-01-20 2 views
0

Я пытаюсь запустить мою хранимую процедуру с использованием mysql неуспешно в какой-то момент. всякий раз, когда я использую этот коднормальный MYSQL не работает с PDO

$link_id = DbConnection::getInstance('mycon')->connectMysql(); 

$table_count = mysql_query("SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = 'mycon' AND table_name LIKE 'table_%' ") 

while($row = mysql_fetch_array($table_count)){ 
$table = $row["TABLE_NAME"]; 
    $excute = mysql_query("dummy_2('$table')") or die(mysql_error()); 
    $result = mysql_fetch_assoc($excute); 
    var_dump($result); 
} 

это дает ошибку говоря

Commands out of sync; you can't run this command now 

поэтому, когда я искал в интернете, он сказал, что мне нужно использовать MYSQL PDO .. Поэтому кто может конвертировать мой выше заявление в mysql pdo .., так как я понятия не имел о PDO вообще

+0

мы не знаем, как инициировать соединение MySQL. У вас этот странный класс «DbConnection», и мы не знаем, где ваши учетные данные БД .... Вы также используете 'mysql_fetch_array', но нет запроса, чтобы сделать это после ..... Похоже, вам нужно вставить много больше кода для нас –

+2

почему бы не попытаться перенести свой код в PDO? не бойтесь ошибаться. в этом нет никакой нехватки ресурсов – Ghost

+0

проверить руководство: http://php.net/manual/en/book.pdo.php – Bandon

ответ

3

Когда вы запрашиваете что-то из базы данных MySQL, результат представлен как результат. На самом деле некоторые запросы могут иметь несколько наборов результатов. Но может быть только один активный список наборов результатов для каждого соединения. То есть вам, ваш скрипт каким-то образом должен закрыть все активные активные наборы результатов, прежде чем вы сможете отправить другой запрос.
Если, например, ваша хранящаяся функция использует несколько SELECT, функция имеет несколько наборов результатов, и вам нужно их повторить/закрыть/удалить.

http://dev.mysql.com/doc/refman/5.1/en/stored-routines-syntax.html:

MySQL поддерживает очень полезное расширение, которое позволяет использовать обычный ЗЕЬЕСТ (то есть, без использования курсоров или локальных переменных) внутри хранимой процедуры. Результирующий набор такого запроса просто отправляется непосредственно клиенту. Несколько операторов SELECT генерируют несколько наборов результатов, поэтому клиент должен использовать клиентскую библиотеку MySQL, которая поддерживает несколько наборов результатов.

Старые, устарели Функции mysql_ * не поддерживают несколько наборов результатов - вы просто не можете их перебирать и удалять.
для MySQL я _ * внутренний абонент: см http://docs.php.net/mysqli.next-result
И так же PDO: см http://docs.php.net/pdostatement.nextrowset.php

Смежные вопросы