【问题标题】:Array search in mysql database with PHP使用 PHP 在 mysql 数据库中进行数组搜索
【发布时间】:2015-01-06 15:29:33
【问题描述】:

有一个数据库,我在其中存储了产品详细信息。 (id、名称、价格、类别、单位)

首先,我在名为“input.php”的 php 文件中列出了可供选择的产品。它就像一个魅力。

// SQL query

    $query = "SELECT    * 
              FROM      products
              ORDER BY  p_name
              ASC";

            $result = mysql_query($query);
            if($result === FALSE) {die(mysql_error());}?>

                <table width="100%">
                    <tr>
                        <td></td>
                        <td width="800px"><h1>Product name</h1></td>
                        <td width="400px"><h1>Product price</h1></td>
                        <td>Category</td>
                    </tr>
                </table>
            <?
            while ($row = mysql_fetch_assoc($result)) {?>
                <table>
                    <tr>
                        <td><input type="checkbox" name="pro_name[]" value="<?=$row['p_name']?>"></td>
                        <td width="800px" align="left"><b><?=$row['p_name']?></b></td>
                        <td width="400px" align="left"><?=$row['p_price']?></td>
                        <td align="center"><?=$row['p_cat']?></td>
                    </tr>
                </table>
                <?}

我将数据提交到“index.php”并处理其中的变量。

 if($_SERVER['REQUEST_METHOD']== "POST"){

// Variables

$c_name = $_POST['c_name'];             //  ['company name']
$c_consumption = $_POST['c_consumption'];   //  ['company consumptions']
$f_price = $_POST['f_price'];               //  ['fuel price']
$o_sales = $_POST['o_sales'];               //  ['sales']
$pro_name = $_POST['pro_name'];         //  ['products names']
$pro_id = $_POST['pro_id'];             //  ['product id']  
$pro_price = $_POST['pro_price'];           //  ['product price']

我卡住的第三步...我需要列出挑选的产品详细信息。

我的想法是从数据库中选择详细信息,并搜索我之前选择的产品名称。

我用 IN、LIKE、implode.... 等进行了尝试,但没有成功。 :(

// SQL query

      $query = "SELECT  * 
                      FROM      products
                      WHERE     p_name IN (".implode(',', $pro_name).")
                      ORDER BY  p_name
                      ASC";

            $result = mysql_query($query);
            if($result === FALSE) {die(mysql_error());}

            while ($row = mysql_fetch_array($result)) {?>
                <table>
                    <tr>                            
                        <td width="800px" align="left"><b><?=$row['p_name']?></b></td>
                        <td width="400px" align="left"><?=$row['p_price']?></td>
                        <td align="center"><?=$row['p_cat']?></td>
                    </tr>
                </table>
                <?}
                }

编辑:

 var_dump($pro_name); result

 array(3) { [0]=> string(14) "12 V szivattyú" [1]=> string(17) "120 l/p szivattyú" [2]=> string(28) "24 hónapra bővített garancia" } 

【问题讨论】:

  • 你得到什么错误信息或输出?
  • 如果 p_name 是 VARCHAR 则 IN 语句应该有 ': IN ('p_name_1', 'p_name_2')
  • 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“V szivattyú,120 l/p szivattyú,24 hónapra bővített garancia) 附近使用正确的语法

标签: php mysql arrays select implode


【解决方案1】:

什么是 $pro_name 值? 如果你使用 implode 那么应该是一个像 $pro_name=array('Fruit','Chocolate','Mirror'); 这样的数组。 那么查询将是:

SELECT  * 
                      FROM      products
                     -> WHERE     p_name IN ("Fruit,Chocolate,Mirror")
                      ORDER BY  p_name
                      ASC

但问题是查询还是错误的,因为",那么你应该删除并更改为

WHERE     p_name IN (implode(',', $pro_name))

然后查询会像

SELECT  * 
                          FROM      products
                         -> WHERE     p_name IN (Fruit,Chocolate,Mirror)
                          ORDER BY  p_name
                          ASC

【讨论】:

  • var_dump($pro_name); array(3) { [0]=> string(14) "12 V szivattyú" [1]=> string(17) "120 l/p szivattyú" [2]=> string(28) "24 hónapra bővített garancia" }
【解决方案2】:

如果 p_name 是字符串类型,我很确定您正在分解的 $pro_names 需要用 ' (单引号分隔符)分隔。看起来你在脚本中的内容会被 sql 解析器解释为列名。

【讨论】:

  • 感谢您的回复! var_dump(implode("','",$pro_name));结果: string(65) "12 V szivattyú','120​​ l/p szivattyú','24 hónapra bővített garancia" 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 'V szivattyú,120 l/p szivattyú,24 hónapra bővített garancia) ORDER BY p_' 附近使用正确的语法
【解决方案3】:

试试这个 SQL

 $pr_name = ltrim(implode(',' , '".$pro_name."'), ',');  
 $query = "SELECT  * 
           FROM products
           WHERE p_name IN ($pr_name)
           ORDER BY p_name
           ASC";

【讨论】:

  • 感谢您的回答。我试过了:Warning: implode() [function.implode]: Invalid arguments pass in C:\AppServ\www\projekt\hardver\index.php on line 49 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 ') ORDER BY p_name ASC' 附近使用正确的语法
【解决方案4】:

感谢您的回复。帮我解决问题。

这是我的解决方案:

<input type="checkbox" name="pro_id[]" value="<?=$row['p_id']?>">

它创建一个数组:

string(24) "6, 7, 10, 20, 21, 49, 54"

$list = implode(', ', $pro_id);

SQL

// SQL query
$query = " SELECT      * 
           FROM       products
           WHERE      p_id IN ($list)
           ORDER BY   p_name
           ASC ";

我认为名称包含查询无法处理的字符,因此现在基于 ID 的查询。我不知道为什么我一开始就不使用 id ......我的错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多