Где я ошибся, чтобы получить выход, как я писал ниже?
Пусть говорят, что в этих таблицах 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
*/
?>
Как уже было сказано в комментариях к вашему вопросу, 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;
mysql_query
< mysqli
<PDO <ORM.
mysqli
используйте хотя бы объектно-ориентированный интерфейс. Это гораздо менее многословно и не может быть случайно перепутано с семейством функций mysql_query
, что экономит много времени на поиск пропущенного i
.
<?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;
}
?>
Я думаю, вы должны попробовать это.
mysql_num_rows
принимает результат, а не строку. Этот код нуждается в исправлении.
mysql_num_rows()
принимает набор результатов, а не строку с оператором SQL. Это также устарело, поэтому больше не поддерживается. Вам, вероятно, нужно изучить выполнение базового оператора SQL с использованием PDO или mysqli.mysql_query
который был удален в PHP 7.mysql_query
например, PDO, нетрудно для изучения, а руководство, например, PHP The Right Way, поможет объяснить лучшие практики. Здесь параметры НЕ экранированы должным образом, и в этом коде есть серьезные ошибки внедрения SQL . Избегайте любых пользовательских данных, особенно из$_POST
или$_GET
.