用PHP实现mysql数据库中的数组搜索
我在一个数据库中存储了产品的详细信息。(标识、名称、价格、类别、单位) 首先,我在一个名为“input.php”的php文件中列出了用于选择的产品。它就像一个符咒用PHP实现mysql数据库中的数组搜索,php,mysql,arrays,select,implode,Php,Mysql,Arrays,Select,Implode,我在一个数据库中存储了产品的详细信息。(标识、名称、价格、类别、单位) 首先,我在一个名为“input.php”的php文件中列出了用于选择的产品。它就像一个符咒 // SQL query $query = "SELECT * FROM products ORDER BY p_name ASC"; $result = mysql_query($query);
// 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>
<?}
第三步,我被绊倒了……我需要列出挑选的产品的详细信息
我的想法是从数据库中选择细节,搜索我之前选择的产品名称
我试过了,比如,内爆……等等,但没用(
$pro_name的值是多少? 如果您使用的是内爆,那么应该是一个类似$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
如果p_名称是字符串类型,我很确定您正在内爆的$pro_名称需要用“(单引号分隔符)分隔。看起来您脚本中的内容会被sql解析器解释为列名。试试这个sql
$pr_name = ltrim(implode(',' , '".$pro_name."'), ',');
$query = "SELECT *
FROM products
WHERE p_name IN ($pr_name)
ORDER BY p_name
ASC";
谢谢你的回复。帮我解决这个问题 以下是我的解决方案:
<input type="checkbox" name="pro_id[]" value="<?=$row['p_id']?>">
SQL
我认为名称中包含查询无法处理的字符,因此现在基于ID的查询。我不知道为什么一开始我不使用ID…我的错。您得到了什么错误消息或输出?如果
p\u name
是VARCHAR,那么中的语句应该有,在('p\u name\u 1',p\u name\u 2')中
您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以了解在第3行“V szivattyú、120 l/p szivattyú、24 hónapra bőVített garancia)”附近使用的正确语法。我尝试了它:警告:内爆()[函数.内爆]:在第49行的C:\AppServ\www\projekt\hardver\index.php中传递的参数无效。您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,在第3var_dump($pro_name);array(3){[0]=>string(14)“12v szivattyú”[1]=>string(17)”行使用的语法是否正确120 l/p szivattyú“[2]=>字符串(28)“24 hónapra bővítet garancia”}感谢您的回复!var_dump(内爆(“,”,“,$proúname));结果:字符串(65)“12 v szivattyú”,“120 l/p Szivattú”,“24 hónapra bővítet garancia“您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第3行“V szivattyú、120 l/p szivattyú、24 hónapra bőVített garancia)ORDER BY pú的正确语法
SELECT *
FROM products
-> WHERE p_name IN (Fruit,Chocolate,Mirror)
ORDER BY p_name
ASC
$pr_name = ltrim(implode(',' , '".$pro_name."'), ',');
$query = "SELECT *
FROM products
WHERE p_name IN ($pr_name)
ORDER BY p_name
ASC";
<input type="checkbox" name="pro_id[]" value="<?=$row['p_id']?>">
string(24) "6, 7, 10, 20, 21, 49, 54"
$list = implode(', ', $pro_id);
// SQL query
$query = " SELECT *
FROM products
WHERE p_id IN ($list)
ORDER BY p_name
ASC ";