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

PHP-多个MySQL结果,在单独的变量中,php,mysql,rows,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_0

我需要执行一个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脚本来做到这一点

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

类似于此。

您的代码将如下所示:

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

while ($row = mysql_fetch_array($result)) {
    // Code for each result here.
    // id = $row['id']
    // img = $row['img']
}
这个查询基本上是
table_blah
中选择id和img,并且
img
必须与1002相同,并且
%
表示从那里开始的任何内容仅限5个结果

然后:

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

while ($row = mysql_fetch_array($result)) {
    // Code for each result here.
    // id = $row['id']
    // img = $row['img']
}
使用此查询

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


我希望这会对您有所帮助

$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 />';  
}
$queryStr=“从表名称中选择img,在其中搜索类似于“1002%”的字符串”;
$query=mysql\u query($queryStr);
while($row=mysql\u fetch\u assoc($query)){
$imageArray[]=$row;
}
//打印阵列
回声';
打印(图像阵列);
回声';
//如何使用数组
foreach($imageArray作为$key=>$val){
echo“文件名:”。$val;
回声“
”; 回声'; 回声“
”; } //现在显示前五个结果 //Alternet:您可以在mysql中使用LIMIT和orderby //使用php
对于($i=0;$i要搜索部分匹配,可以在SQL中使用
LIKE
运算符。在这种情况下,可以编写:

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

至于第二部分,你确定你想要不同的变量名而不是数组吗?数组更容易使用。如果你先在数组中累积数据,然后使用:


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

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

$img='1002';//例如
$connection=newmysqli(主机、用户、密码、数据库);
$sql=“从img中选择img,如“$img%”限制5”;
如果($connection->query($sql)){
$counter=1;
而($row=$connection->fetch_object()){
${'img'.$counter}=$row->img;
$counter++;
}
}

jared:您的代码看起来有点像我想要的那样,几乎……问题是它是来自数据库中同一字段的多个结果……运行这个精确的代码,并将注释代码替换为:
echo“id:{$row['id']}img:{$row['img']};
您会发现它可以工作:)您的代码包含SQL注入(或者至少有可能实现一个)。此外,请停止推荐其他
mysql*
函数,它们不再被维护,社区已经开始了弃用过程。您应该开始使用PDO或MySQLi API和准备好的语句编写代码。
$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 />';  
}
$sql = "SELECT img FROM tablename WHERE img like '1002%'";
$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
     $query = "SELECT * FROM img_table WHERE img_name regexp concat('1002', '%')"
     $results = mysql_query($query);
$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++;
    }
}