【发布时间】:2019-01-04 22:39:48
【问题描述】:
我在哪里弄错了,得到如下所示的输出?
- 数组内部是表的名称。
假设在这些表中有 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()接受一个结果集,而不是一个包含 SQL 语句的字符串。它也已弃用,因此不再受支持。您可能需要考虑使用 PDO 或 mysqli 运行基本 SQL 语句。 -
警告:不要使用在 PHP 7 中删除的过时的
mysql_query接口。PDO is not hard to learn 之类的替代品和PHP The Right Way 之类的指南有助于解释最佳实践.这里的参数是 NOT properly escaped 并且在这段代码中有严重的 SQL injection bugs。转义任何和所有用户数据,尤其是来自$_POST或$_GET。 -
使用可变变量(例如
$$x)在最好的情况下风险极大。在 SQL 查询中使用变量变量是鲁莽的。不要这样做。只需在其中创建一个数组$g_module_rows和push即可。不要使用$$创建变量堆。 -
使用数组的一个很好的理由是你可以迭代它们。你不能用成堆的变量轻易地做到这一点。这 9 行复制粘贴的代码可以归结为 4 行灵活的代码,它们可以通过简单的
for循环处理 N 行。
标签: php mysql string variables for-loop