Как создать строки для цикла с помощью SELECT, используя переменные переменные PHP

0

Где я ошибся, чтобы получить выход, как я писал ниже?

  1. Внутренний массив - это имена таблиц.

Пусть говорят, что в этих таблицах 0 строк, поэтому везде должно быть 0 в качестве вывода.

<?php
$g_module =
array(
  'm_b_broadcast_live',
  'm_b_browsing_live',
  'm_e_askfm_likes_live',
  'm_e_facebook_followers_live',
  'm_e_facebook_group_joins_live',
);

for ($i = 0; $i <= 5; $i++) {
  $modules_names = "g_module[$i]";
  $modules_from = '$'.$modules_names;

  $modules_rows = '$g_module_row_'.$i;

  $$modules_rows = mysql_num_rows("SELECT * FROM $$modules_from");
}

echo $g_module_row_1;
echo '</br>';
echo $g_module_row_2;
echo '</br>';
echo $g_module_row_3;
echo '</br>';
echo $g_module_row_4;
echo '</br>';
echo $g_module_row_5;

/* output should be:
0

0

0

0

0
*/
?>
  • 1
    mysql_num_rows() принимает набор результатов, а не строку с оператором SQL. Это также устарело, поэтому больше не поддерживается. Вам, вероятно, нужно изучить выполнение базового оператора SQL с использованием PDO или mysqli.
  • 0
    ПРЕДУПРЕЖДЕНИЕ . Не используйте устаревший интерфейс mysql_query который был удален в PHP 7. mysql_query например, PDO, нетрудно для изучения, а руководство, например, PHP The Right Way, поможет объяснить лучшие практики. Здесь параметры НЕ экранированы должным образом, и в этом коде есть серьезные ошибки внедрения SQL . Избегайте любых пользовательских данных, особенно из $_POST или $_GET .
Показать ещё 2 комментария
Теги:
string
for-loop
variables

2 ответа

0
Лучший ответ

Как уже было сказано в комментариях к вашему вопросу, mysql_num_rows() принимает результат запроса как параметр, а не строку запроса.
Кроме того, вы должны использовать mysqli ! Посмотрите на документацию здесь.

Что-то еще, что вы можете упростить, - это избежать знака доллара, так что вам не нужно снова конкатенировать один из $modules_names.

Исправленный код будет выглядеть так:

<?php
$g_module = [
    'm_b_broadcast_live',
    'm_b_browsing_live',
    'm_e_askfm_likes_live',
    'm_e_facebook_followers_live',
    'm_e_facebook_group_joins_live',
];

// you have to create a connection to your database server first
// of course you will have to swap out my placeholders for the actual credentials
$con=mysqli_connect('mysql_server_address_here','username_here','password_here','database_name_here');

for($i=0;$i<=5;$i++){
    $modules_from = "\$g_module[$i]";

    $modules_rows = "\$g_module_row_$i";

    $q=mysqli_query("SELECT * FROM $$modules_from");

    //use mysqli_num_rows instead
    $$modules_rows = mysqli_num_rows($q);
}

// close your connection after you are finished
mysqli_close($con);

echo $g_module_row_1;
echo '</br>';
echo $g_module_row_2;
echo '</br>';
echo $g_module_row_3;
echo '</br>';
echo $g_module_row_4;
echo '</br>';
echo $g_module_row_5;
  • 0
    mysql_query < mysqli <PDO <ORM.
  • 0
    Также, если вы собираетесь использовать mysqli используйте хотя бы объектно-ориентированный интерфейс. Это гораздо менее многословно и не может быть случайно перепутано с семейством функций mysql_query , что экономит много времени на поиск пропущенного i .
Показать ещё 2 комментария
0
<?php
    $g_module =
    array(
        'm_b_broadcast_live',
        'm_b_browsing_live',
        'm_e_askfm_likes_live',
        'm_e_facebook_followers_live',
        'm_e_facebook_group_joins_live',
    );

    foreach($g_module as $table_name){
        $count = mysql_num_rows("SELECT * FROM $table_name");
        echo "<br/>".$count;
    }
?>

Я думаю, вы должны попробовать это.

  • 1
    mysql_num_rows принимает результат, а не строку. Этот код нуждается в исправлении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню