繁体   English   中英

如何在MySQL查询的'IN'子句中使用PHP的值数组?

[英]How to use an array of values from PHP in the 'IN' clause of mysql query?

//get all id's of ur friend that has installed your application
 $friend_pics=$facebook->api( array( 'method' => 'fql.query', 'query' => "SELECT uid FROM user WHERE uid   IN(SELECT uid2 from friend WHERE uid1='$user') AND is_app_user = 1" ) ); // this query work fine
//your top10 friends in app
$result="SELECT * FROM fb_user WHERE user_id IN($friend_pics) ORDER BY oldscore DESC LIMIT 0,10";
db_execute($result);

我想从存储在oldscore中的数据库中检索十个最佳得分手,但是在第二个查询中,阵列名称$ friend_pics无法正常工作,我想,请帮我谢谢

没有本地支持。 甚至绑定参数API也不允许对IN子句使用数组。 您必须使用一些辅助代码来构造查询:

$friend_pics = array_map("mysql_real_escape_string", $friend_pics);
$friend_pics = "'" . implode("', '", $friend_pics) . "'";
"SELECT * WHERE user_id IN ($friend_pics)              "

一个更简单的选择是mysqls FIND_IN_SET()但是:

$friend_pics = mysql_real_escape_string(implode(",", $friend_pics));
"SELECT * FROM fb_user WHERE find_in_set(user_id,'$friend_pics')     "

除非数组很大,否则为什么不将该数组转换为一长串的值列表。

    $ids    = array(2, 4, 6, 8);
$params = implode(",", array_fill(0, count($ids), "?"));

    $result="SELECT * FROM fb_user WHERE user_id IN($params) ORDER BY oldscore DESC LIMIT 0,10";
db_execute($result);

$friend_pics应该是包含逗号分隔列表(即“ 1、2、3、4”)的字符串。 如果不是,那么您的第二个查询将始终失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM