Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用变量PHP在带有SELECT的for循环中创建字符串_Php_Mysql_String_Variables_For Loop - Fatal编程技术网

如何使用变量PHP在带有SELECT的for循环中创建字符串

如何使用变量PHP在带有SELECT的for循环中创建字符串,php,mysql,string,variables,for-loop,Php,Mysql,String,Variables,For Loop,我在哪里犯了一个错误,像下面写的那样获取了输出? 数组内部是表的名称 假设这些表中有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 <=

我在哪里犯了一个错误,像下面写的那样获取了输出?

  • 数组内部是表的名称
  • 假设这些表中有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\u num\u rows()
    将查询结果作为参数,而不是查询字符串。
    另外,您应该使用mysqli!查看文档

    您可以简化的另一个方法是转义美元符号,这样您就不必再次将美元符号连接到
    $modules\u name

    更正后的代码如下所示:

    <?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\u num\u rows()
    接受结果集,而不是包含SQL语句的字符串。它也不推荐使用,因此不再受支持。您可能需要考虑使用PDO或mysqli运行基本SQL语句。警告:不要使用PHP7中删除的过时接口。替换类和指南类有助于解释最佳实践。这里没有参数,这在代码中有严重的错误。转义任何和所有用户数据,特别是从
    $\u POST
    $\u GET
    转义。在最好的情况下,使用变量(例如
    $$x
    )是非常危险的。在SQL查询中使用变量是鲁莽的。不要这样做。只需创建一个数组
    $g_module_rows
    将东西推入其中。不要使用
    $$
    创建变量堆。使用数组的一个很好的理由是,您可以对它们进行迭代。使用成堆的变量很难做到这一点。这九行复制粘贴的代码可以归结为四行灵活的代码,它们可以通过一个简单的
    for
    循环处理N行。
    mysql\u查询
    mysqli
    mysqli
    至少要使用面向对象的接口。它不会太冗长,也不会意外地与
    mysql\u query
    函数系列混淆,从而节省了大量时间查找缺少的
    i
    。抱歉@tadman,我现在从一开始就一直使用程序性mysqli函数或PDO。因为OP使用了
    mysql
    ,所以我坚持使用它(除了
    I
    )。如果你愿意,欢迎你添加另一个包含PDO或你认为最好的解决方案的答案。是的,我在这里有点特别,但我看到太多的问题,人们几乎没有从垃圾的老方法
    mysql\u query
    mysql\u query
    ,存在同样的缺陷。使用面向对象的风格可以更彻底地解决问题,避免大量问题,因此值得推广。或者PDO,就像你说的
    mysql\u num\u rows
    接受结果,而不是字符串。这段代码需要修复。
    <?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;