PHP - 多个MySQL结果,在单独的变量中

时间:2012-07-04 06:29:11

标签: php mysql rows

我需要执行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脚本来执行此操作。

10 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

我希望这会对你有所帮助。总是尝试使用最新的apis和像 MySqli 这样的功能,尽量避免使用 mysql _ * 函数,因为它们已被弃用,MySqli也比mysql_ functions更快

$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++;
    }
}

答案 2 :(得分:0)

$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
}

类似的东西。

答案 3 :(得分:0)

您的代码将如下所示:

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

此查询基本上是选择 ID,而img 来自table_blahimg必须与1002相同,{ {1}}绝对意味着从那里开始。 限制至5个结果。

,然后

%

答案 4 :(得分:0)

使用此查询

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

答案 5 :(得分:0)

<?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'];
  }
?>

答案 6 :(得分:0)

$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 :(得分:0)

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

$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 :(得分:0)

要搜索部分匹配,可以在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 :(得分:0)

     $query = "SELECT * FROM img_table WHERE img_name regexp concat('1002', '%')"
     $results = mysql_query($query);

然后$ results是一个img字符串数组