Dynamic select mysqli query with dynamic parameters returns error doesnamp;#39;t match number of bind variables(带有动态参数的动态SELECT mysqli查询返回错误amp;t与绑定变量的数量不匹配)
本文介绍了带有动态参数的动态SELECT mysqli查询返回错误&;t与绑定变量的数量不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试使用动态WHERE子句和动态参数创建SELECT查询,但总是收到错误:
警告: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();
推荐答案
原因:
- 您正在使用用户提供的数据,您必须假设您的查询容易受到恶意注入攻击,并且
- 要构建到查询中的数据量是可变的/不确定的,
- 您仅对单个表列编写条件检查
您应该使用预准备语句,并将所有WHERE
子句逻辑合并到单个IN
语句中。
构建此动态预准备语句比使用PDO更复杂(就语法而言),但这并不意味着您需要仅仅因为此任务而放弃mysqli。
$mediaArray ='Facebook,Twitter,Twitch,';
$otherMedia = 'House';
$media = array_unique(explode(',', $mediaArray . $otherMedia));
$count = count($media);
$conn = new mysqli("localhost", "root", "", "myDB");
$sql = "SELECT * FROM mediaservices";
if ($count) {
$stmt = $conn->prepare("$sql WHERE socialmedianame IN (" . implode(',', array_fill(0, $count, '?')) . ")");
$stmt->bind_param(str_repeat('s', $count), ...$media);
$stmt->execute();
$result = $stmt->get_result();
} else {
$result = $conn->query($sql);
}
foreach ($result as $row) {
// access values like $row['socialmedianame']
}
寻找类似动态查询技术的任何人:
SELECT
with dynamic number ofLIKE
conditionsINSERT
dynamic number of rows with oneexecute()
call
这篇关于带有动态参数的动态SELECT mysqli查询返回错误&;t与绑定变量的数量不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:带有动态参数的动态SELECT mysqli查询返回错误&;t与绑定变量的数量不匹配
基础教程推荐
猜你喜欢
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 在多维数组中查找最大值 2021-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01