Re: [请益] 想请问一下关于pdo搜寻多组字串的问题

楼主: rjackie (向前走,才知道转角)   2017-02-10 20:50:52
※ 引述《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变成阵列方式但还是有问题。
不知道这情况是否有什么建议作法呢?
感恩
作者: MOONRAKER (㊣牛鹤鳗毛人)   2017-02-10 22:18:00
这个…既然你对每个搜寻词都会加三段like 里面都有?那你$arguments[] = 那边也应该要连续加三次吧不然以你现在的写法 k个搜寻词 最后送execute的字串里会有3*k个? 可是arguments里面却只有k个
楼主: rjackie (向前走,才知道转角)   2017-02-11 03:36:00
所以是这样难怪一直报错误,我试看看这方式刚刚用土炮的方式解决了,但这方法因该可以是看看感谢M大\
作者: hung0724 (三头)   2017-02-11 07:34:00
错误讯息写得很明白了阿...
楼主: rjackie (向前走,才知道转角)   2017-02-11 17:23:00
不好意思,那么如果这样写的话execute($arguments)也需要改成execute($arguments,$arguments,$arguments)吗?
作者: MOONRAKER (㊣牛鹤鳗毛人)   2017-02-11 19:42:00
只要确定你$arguments里面元素数跟 ? 数符合就好所以一个搜寻词加进$arguments要连加三次如果换成同一个阵列连续用三次 没写过 你可以试试看

Links booklink

Contact Us: admin [ a t ] ucptt.com