【问题标题】:PHP - Multiple MySQL result, in separate variablesPHP - 多个 MySQL 结果,在单独的变量中
【发布时间】:2012-07-04 15:06:30
【问题描述】:

我需要执行 MySQL 查询来搜索包含提交值的不精​​确匹配/匹配。

以下是我的数据库中的示例:

id               img
1          1001_ABC_01.jpg
2          1001_ABC_02.jpg
3          1002_ABC_01.jpg
4          1002_ABC_02.jpg
5          1002_ABC_03.jpg
6          1002_ABC_04.jpg
7          1002_ABC_05.jpg
8          1003_ABC_01.jpg
9          1003_ABC_02.jpg
10         1003_ABC_03.jpg

我需要查询来搜索文件名的第一部分 (1002),并为 img 字段中的每个返回结果分配一个不同的变量。变量的最大数量为 5。

例如,如果我搜索1002,它应该分配以下变量:

    <?php
    $img1 = '1002_ABC_01.jpg';
    $img2 = '1002_ABC_02.jpg';
    $img3 = '1002_ABC_03.jpg';
    $img4 = '1002_ABC_04.jpg';
    $img5 = '1002_ABC_05.jpg';
    ?>

这样我就可以单独回显每个文件名结果。

同样,这里的最大变量数量为 5,因此如果返回的结果超过 5 个,则只会分配前 5 个变量。

请让我知道这是否可行以及如何编写 PHP 脚本来做到这一点。

【问题讨论】:

    标签: php mysql rows


    【解决方案1】:
    SELECT img FROM <table_name> WHERE img LIKE '%search%' ORDER BY ID DESC LIMIT 5;
    

    你可以substring函数,如果前四个整数是这样固定的:

    select substring(img,1,4) from <table_name> where img = 'search' order by ID DESC limit 5;
    

    【讨论】:

      【解决方案2】:

      我希望这会对你有所帮助。始终尝试使用最新的 api 和函数,如 MySqli 尽量避免使用 mysql_* 函数,因为它们已被贬值,而且 MySqli 也比 mysql_ 函数更快

      $img = '1002'; // For example
      $connection = new Mysqli(host, user, password, database);
      $sql = "SELECT img FROM <table_name> WHERE img LIKE '$img%' LIMIT 5";
      
      if($connection->query($sql)){
          $counter = 1;
          while ($row = $connection->fetch_object()){
              ${'img'.$counter} = $row->img;
              $counter++;
          }
      }
      

      【讨论】:

        【解决方案3】:
        $query = "SELECT * FROM my_table WHERE img_name LIKE '%1002%' LIMIT 5";
        
        foreach ( $fetched_row as $value ) {
          echo $value [ 'img_name' ]; // or whatever you want to do
        }
        

        类似的东西。

        【讨论】:

          【解决方案4】:

          使用这个查询

          SELECT img as IMG
          FROM my_table
          WHERE img LIKE '1002%'
          order by id desc
          LIMIT 5
          

          【讨论】:

            【解决方案5】:
            <?php
              $query="SELECT id,img as image FROM image_table 
              where img like '%$keyword%' limit 5";
              $res=mysql_query($query) or die(mysql_error());
              while ($img = mysql_fetch_array($res)) {
                echo $img['image'];
              }
            ?>
            

            【讨论】:

            • 您的代码包含 SQL 注入(或至少有可能)。另外,请停止推荐其他 mysql_* 功能,它们不再维护,社区已开始弃用过程。您应该开始使用 PDO 或 MySQLi API 和准备好的语句编写代码。
            【解决方案6】:
            $con = new Mysqli(host, user, password, database);
            $result = $con->query("SELECT * FROM table WHERE image LIKE %$search% ORDER BY id DESC LIMIT 5");
            if($result){
                while ($row = $con->fetch_object()){
                    $img_arr[] = $row;
                }
            }
            

            【讨论】:

              【解决方案7】:

              我希望这会对你有所帮助。

              $queryStr = "SELECT img FROM table_name WHERE search_str LIKE '1002%'";
              $query = mysql_query($queryStr);
              
              while($row = mysql_fetch_assoc($query)){
                  $imageArray[] = $row;   
              }
              
              // Print the array
              echo '<pre>';
              print_r($imageArray);
              echo '</pre>';
              
              // How to use the array
              foreach($imageArray as $key=>$val){
                  echo 'File Name: '.$val;
                  echo '<br />';
                  echo '<img src="'.$val.'" />';  
                  echo '<hr />';
              }
              
              // Now show first five result
                  // Alternet: You can use LIMIT and order by with mysql
              // With php
              for($i=0;$i<5;$i++){
                  echo 'File Name: '.$imageArray[$i];
                  echo '<br />';
                  echo '<img src="'.$imageArray[$i].'" />';   
                  echo '<hr />';  
              }
              

              【讨论】:

                【解决方案8】:

                要搜索部分匹配,您可以在 SQL 中使用 LIKE 运算符。在这种情况下,你可以写:

                $sql = "SELECT img FROM tablename WHERE img like '1002%'";
                

                如何在 PHP 中执行此查询并获取结果取决于您使用的数据库 API:旧 MySQL? MySQLi? PDO?此外,1002 可能是用户输入,在这种情况下,您必须保护您的程序免受 SQL 注入攻击。

                至于第二部分,你确定你想要不同的变量名而不是数组吗?数组更容易使用。如果先将数据累加到一个数组中,然后使用extract,可以得到不同的变量名:

                $result = array();
                $counter = 1;
                $rs = mysql_query($sql); // using old mysql API
                
                while ($row = mysql_fetch_array($rs)) {
                    $result["img".$counter] =  $row[0];
                    $counter = $counter + 1;
                }
                
                extract($result);
                // now $img1, $img2, $img3, ... are defined
                

                【讨论】:

                  【解决方案9】:

                  您的代码将如下所示:

                  $input = '1002'; // For example
                  $query = "SELECT id, img FROM table_blah WHERE img LIKE '$input%' LIMIT 5";
                  

                  这个查询基本上是selectingid,img fromtable_blah,并且img必须和1002一样,而%的意思是绝对从那里开始的任何事情。 限制到 5 个结果。

                  那么:

                  $result = mysql_query($query);
                  
                  while ($row = mysql_fetch_array($result)) {
                      // Code for each result here.
                      // id = $row['id']
                      // img = $row['img']
                  }
                  

                  【讨论】:

                  • jared:你的看起来有点像我想要的,几乎......问题是它是来自数据库中同一字段的多个结果......
                  • 运行这个确切的代码,并将注释的代码替换为:echo "id: {$row['id']} img: {$row['img']}"; 你会发现它有效:)
                  【解决方案10】:
                       $query = "SELECT * FROM img_table WHERE img_name regexp concat('1002', '%')"
                       $results = mysql_query($query);
                  

                  那么 $results 就是一个 img 字符串数组

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2015-08-11
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-01-29
                    • 2011-08-19
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多