【发布时间】:2018-09-12 22:54:13
【问题描述】:
我正在尝试使用动态 where 子句和动态参数创建选择查询,但总是出错:
警告:mysqli_stmt::bind_param(): 类型中的元素数 定义字符串与绑定变量的数量不匹配
我真的不明白,因为计数似乎没问题。所以这就是代码在粗鲁格式下的真实样子。我看不出我做错了什么。
//get variables
$mediaArray ='Facebook,Twitter,Twitch,';
$otherMedia = 'House';
//convert string to array
$socialArray = explode(',', $mediaArray)
//declare some variables to be used later
$andwhere = '';
$bp = '';
$socialmarray = ''
//get every value from array of social media
foreach($socialArray as $socialmedia){
$socialmarray .=$socialmedia.',';
$andwhere .= " AND socialmedianame=?";
$bp .='s';
}
//test strings
echo $wheres = $andwhere;//AND socialmedianame=? AND socialmedianame=? AND socialmedianame=?
echo $bip = $bp.'s';//ssss
echo $validarayy = rtrim($socialmarray,',');//Facebook,Twitter,Twitch
//select query
$selectquery = $conn->prepare("select * from mediaservices where socialmedianame=? $wheres");
$selectquery->bind_param("$bip",$otherMedia,$validarayy);
$selectquery->execute();
$resultquery = $selectquery->get_result();
【问题讨论】:
-
将所有关于 socialmedianame 的查询条件合并到一个批次中并使用:stackoverflow.com/a/48452420/2943403
-
@mickmackusa:感谢您的意见,但在查看了帖子后,我看不出它是如何重复的?
-
我觉得我会复制我的答案以在此处重新发布。使用
IN关键字而不是单独的多个=比较将使您生成的查询更加简洁并纠正您有缺陷的 WHERE 逻辑。我并不是在“抨击”你的问题——只是试图引导你和未来的研究人员找到我知道的合适的现有解决方案(因为我写了它)。 -
@mickmackusa:非常感谢您用我的代码回答。谢谢。