У меня есть функция, которая принимает 2 переменные, одну для подключения к базе данных, а другую для запроса. По какой-то причине, ссылка на mysqli не рада, если она не внутри функции; Недостаточно просто перейти по ссылке.
Кто-нибудь еще случался, и что я могу сделать, чтобы избежать создания объекта db внутри функции.
Это не работает, но если я помещаю объект в функцию, это работает.
function test($db, $query)
{
if($db->multi_query($query)){
do{
if($result = $db->store_result()){
while($row = $result->fetch_row()){
print_r($row);
}
$result->free_result();
$result->close();
}
if($db->more_results()){
// print something here.
}
}while($db->next_result());
}
$db->close();
}
Вот как я их называю
$db = new mysqli('xxxx','xxxx','xxxx','xxxx');
$q1 = ("SELECT * FROM table1");
$q2 = ("SELECT * FROM table2");
test($db,$q1);
test($db,$q2);
Без использования ссылки mysqli внутри функции я никогда не увижу запрос №2. Единственное, что я получаю, это ошибки во втором запросе. (multi_query (): не удалось получить mysqli)
I just ran your code and here is what I get from the error log
[Пт, 08 января 08:12:43 2010] [ошибка] [клиент 127.0.0.1] Предупреждение PHP: mysqli :: multi_query (): не удалось получить mysqli в C: \ Program Files \ Apache Software Foundation \ Apache2 .2 \ htdocs \ test \ 1.php в строке 24
[Пт, 08 января 08:12:43 2010] [ошибка] [клиент 127.0.0.1] Предупреждение PHP: mysqli :: close (): не удалось получить mysqli в C: \ Program Files \ Apache Software Foundation \ Apache2 .2 \ htdocs \ test \ 1.php в строке 38 [пт, 08 января 08:12:43 2010]
[ошибка] [клиент 127.0.0.1] Предупреждение PHP: mysqli :: multi_query (): не удалось получить mysqli в C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ test \ 1.php on строка 24 [пт янв 08 08:12:43 2010]
[ошибка] [клиент 127.0.0.1] Предупреждение PHP: mysqli :: close (): не удалось получить mysqli в C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ test \ 1.php on строка 38 [пт янв 08 08:12:43 2010]
[ошибка] [клиент 127.0.0.1] Предупреждение PHP: mysqli :: multi_query (): не удалось получить mysqli в C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ test \ 1.php on строка 24 [пт янв 08 08:12:43 2010]
[ошибка] [клиент 127.0.0.1] Предупреждение PHP: mysqli :: close (): не удалось получить mysqli в C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ test \ 1.php on строка 38 [пт янв 08 08:12:43 2010]
[ошибка] [клиент 127.0.0.1] Предупреждение PHP: mysqli :: multi_query (): не удалось получить mysqli в C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ test \ 1.php on строка 24 [пт янв 08 08:12:43 2010]
[ошибка] [клиент 127.0.0.1] Предупреждение PHP: mysqli :: close (): не удалось получить mysqli в C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ test \ 1.php on линия 38
Вот то, что я запускаю сейчас, но все еще только возвращает один запрос, который оказывается первым из перечисленных «Заметок»
function query_db( $link, $query ) {
/* execute multi query */
if ( $link->multi_query( $query ) ) {
do {
/* store first result set */
if ($result = $link->store_result() ) {
while( $row = $result->fetch_row() ) {
print_r( $row );
}
echo '<br/>';
$result->close();
}
if( $link->more_results() ) {
// ...
}
} while ( $link->next_result() );
}
}
$db = new mysqli( 'xxxx', 'xxxx', 'xxxx', 'xxxx' );
query_db( $db, 'CALL Notes();'
query_db( $db, 'CALL Users();'
query_db( $db, 'SELECT * FROM test';
$ db = new mysqli ('xxxx', 'xxxx', 'xxxx', 'xxxx');
$f1 = fa($db,"CALL phones();");
$f2 = fa($db,"CALL users();");
ОК, очень просто .. Мы запрашиваем базу данных 2 раза. Один раз, чтобы получить все телефоны, затем присвойте возвращаемое значение переменной $ f1. Мы делаем то же самое для $ f2. Когда я запускаю этот код, $ f2 никогда не дает результата. это всегда пусто Однако когда я выполняю print_r для каждого вызова независимо, я получаю правильные результаты. Это действительно странно! Вы должны быть в состоянии повторить то же самое поведение с кодом, который мы разместили ниже. Просто попробуйте назначить возвращаемый набор каждой переменной, а затем попытайтесь повторить результаты.