gpt4 book ai didi

php - 带有动态参数的动态选择 mysqli 查询返回错误与绑定(bind)变量的数量不匹配

转载 作者:行者123 更新时间:2023-12-02 20:16:24 25 4
gpt4 key购买 nike

我正在尝试使用动态 where 子句和动态参数创建一个选择查询,但总是收到错误:

Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables

我真的不明白,因为计数似乎没问题。这就是代码在粗鲁格式下的真实样子。我看不出我做错了什么。

//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();

最佳答案

因为:

  1. 您正在使用用户提供的数据,您必须假设您的查询容易受到恶意注入(inject)攻击,并且
  2. 要构建到查询中的数据量是可变/不确定的,并且
  3. 您仅在单个表列上编写条件检查

您应该使用准备好的语句并将所有 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']
}

对于任何寻找类似动态查询技术的人:

关于php - 带有动态参数的动态选择 mysqli 查询返回错误与绑定(bind)变量的数量不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52304503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com