Поиск массива в базе данных mysql с помощью PHP

Там есть БД, где я хранил информацию о продуктах. (идентификатор, название, цена, категория, единица измерения)

Во-первых, я перечислил продукты для выбора в файле php с именем «input.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" } 

person laboris amnis    schedule 06.01.2015    source источник
comment
Какие сообщения об ошибках или вывод вы получаете?   -  person ply    schedule 06.01.2015
comment
если p_name является VARCHAR, то оператор IN должен иметь ': IN ('p_name_1', 'p_name_2')   -  person u_mulder    schedule 06.01.2015
comment
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с «V szivattyú, 120 l/p szivattyú, 24 hónapra bővített garancia)» в строке 3   -  person laboris amnis    schedule 07.01.2015


Ответы (4)


Каково значение $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
person Loose    schedule 06.01.2015
comment
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 } - person laboris amnis; 07.01.2015

Если p_name является строковым типом, я почти уверен, что $pro_names, которые вы взрываете, должны быть разделены ' (разделитель одинарных кавычек). Похоже, что то, что у вас есть в вашем скрипте, будет интерпретироваться синтаксическим анализатором sql как имена столбцов.

person trogers1884    schedule 06.01.2015
comment
Спасибо за ваш ответ! var_dump(взорвать(',',$pro_name)); результат: string(65) 12 V szivattyú','120 ​​l/p szivattyú','24 hónapra bővített garancia У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с «V szivattyú, 120 l/p szivattyú, 24 hónapra bővített garancia) ORDER BY p_» в строке 3 - person laboris amnis; 07.01.2015

Попробуйте этот SQL

 $pr_name = ltrim(implode(',' , '".$pro_name."'), ',');  
 $query = "SELECT  * 
           FROM products
           WHERE p_name IN ($pr_name)
           ORDER BY p_name
           ASC";
person jay.jivani    schedule 06.01.2015
comment
Спасибо за ваш ответ. Я попробовал это: Предупреждение: implode() [function.implode]: Недопустимые аргументы переданы в C:\AppServ\www\projekt\hardver\index.php в строке 49 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с ') ORDER BY p_name ASC' в строке 3 - person laboris amnis; 07.01.2015

Спасибо за ответы. Помогите мне много, чтобы решить проблему.

Вот мое решение:

<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 в начале... мой плохой.

person laboris amnis    schedule 07.01.2015