作者rjackie (向前走,才知道转角)
看板PHP
标题Re: [请益]想请问一下关於pdo搜寻多组字串的问题
时间Fri Feb 10 20:50:52 2017
※ 引述《uWay (我的极限就到这里)》之铭言:
: ※ 引述《rjackie (向前走,才知道转角)》之铭言:
: : 各位先进 小弟有一事想要请教各位大大
: : 因目前专案有一功能是需要LIKE多组字串,以下程式
: 先问一下,需要LIKE多组字串的功能是?
: : $p_search = explode(" ",$p_search_name);
: : $product_info_sql = $db->prepare("SELECT no FROM product_info
: : where name LIKE '%".$p_search_name."%' ");
: : foreach($p_search as $k){
: : $product_info_sql = $db->prepare( " OR name LIKE '%$k%' ");
: : }
: : $product_info_sql = $db->prepare(" AND status = ? order by sequence
: : DESC limit " . $startRow_records . ",$pageRow_records");
: : $product_info_sql->execute(array('1'));
: : 主要是判断有几组字串(关键字),产生多组OR name LIKE
: : 但是PDO好像不能这样用,还想请大大们解惑
: : 万分感谢
: 或许可以用concat('column') LIKE '%keyword%'的方式去实作你要的功能?
: 我自己的做法是,
: foreach 读出 keyword_Arr,
: 每次回圈去串SQL子句,最後再query
: 给你参考
感谢各位的指导,目前已解决多空格搜寻的功能,可以正常的捞到资料。
但往往事情都没有这麽简单,因为专案需要同时搜寻不同的栏位与资料
表,以下为目前的程式,
<?php
$keys = explode(" ",$_GET['p_search']);
$term = "%".$_GET['p_search']."%";
foreach ($keys as $word) {
$search_name[] = 'product_info.name LIKE ?';
$search_summary[] = 'product_info.summary LIKE ?';
$search_model[] = 'product_standard_data.model LIKE ?';
$arguments[] = '%'.$word.'%';
}
$product_info_auto_sql = $db->prepare("
SELECT
product_info.name
FROM
product_info,product_standard_data
WHERE
product_info.no = product_standard_data.product_no
AND
".implode(' AND ', $search_name)."
OR
".implode(' AND ', $search_summary)."
OR
".implode(' AND ', $search_model)."
AND
product_info.status = '1' GROUP BY product_info.name order by product_in
fo.sequence DESC, product_info.name DESC");
$product_info_auto_sql->execute($arguments);
while($product_info_auto_row = $product_info_auto_sql->fetch()){
echo $product_info_auto_row['name'];
}
?>
问题在於无法在execute的时候会发生
Invalid parameter number: number of bound variables does not match number
有尝试过arguments使用三次当然一定会错,或是将$term变成阵列方式但还是有问题。
不知道这情况是否有什麽建议作法呢?
感恩
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.216.19.62
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1486731054.A.1F7.html
1F:→ MOONRAKER: 这个…既然你对每个搜寻词都会加三段like 里面都有? 02/10 22:18
2F:→ MOONRAKER: 那你$arguments[] = 那边也应该要连续加三次吧 02/10 22:19
3F:→ MOONRAKER: 不然以你现在的写法 k个搜寻词 最後送execute的字串里 02/10 22:20
4F:→ MOONRAKER: 会有3*k个? 可是arguments里面却只有k个 02/10 22:21
5F:→ rjackie: 所以是这样难怪一直报错误,我试看看这方式刚刚用土炮 02/11 03:36
6F:→ rjackie: 的方式解决了,但这方法因该可以是看看感谢M大\ 02/11 03:38
7F:推 hung0724: 错误讯息写得很明白了阿... 02/11 07:34
8F:→ rjackie: 不好意思,那麽如果这样写的话execute($arguments)也需要 02/11 17:23
9F:→ rjackie: 改成execute($arguments,$arguments,$arguments)吗? 02/11 17:23
10F:→ MOONRAKER: 只要确定你$arguments里面元素数跟 ? 数符合就好 02/11 19:42
11F:→ MOONRAKER: 所以一个搜寻词加进$arguments要连加三次 02/11 19:43
12F:→ MOONRAKER: 如果换成同一个阵列连续用三次 没写过 你可以试试看 02/11 19:44