当前位置: 首页 > 面试题库 >

MySQL准备的带有可变大小变量列表的语句

高飞翮
2023-03-14
问题内容

您将如何用PHP编写一个准备好的MySQL语句,每次使用不同数量的参数?这样的查询的示例是:

SELECT `age`, `name` FROM `people` WHERE id IN (12, 45, 65, 33)

IN条款将有不同数量的ids各自运行它时。

我心中有两种可能的解决方案,但想看看是否有更好的方法。

可能的解决方案1 使该语句接受100个变量,并用保证不在表中的伪值填充其余变量;多次调用100多个值。

可能的解决方案2 请勿使用准备好的语句;严格构建并运行查询以检查可能的注入攻击


问题答案:

我可以想到几个解决方案。

一种解决方案可能是创建一个临时表。在表中插入in子句中的每个参数。然后对您的临时表进行简单的联接。

另一种方法可能是做这样的事情。

$dbh=new PDO($dbConnect, $dbUser, $dbPass);
$parms=array(12, 45, 65, 33);
$parmcount=count($parms);   // = 4
$inclause=implode(',',array_fill(0,$parmcount,'?')); // = ?,?,?,?
$sql='SELECT age, name FROM people WHERE id IN (%s)';
$preparesql=sprintf($sql,$inclause);  // = example statement used in the question
$st=$dbh->prepare($preparesql);
$st->execute($parms);

我怀疑但没有证据表明,第一种解决方案可能适用于较大的列表,而后一种解决方案适用于较小的列表。

让@orrd开心的是一个简短的版本。

$dbh=new PDO($dbConnect, $dbUser, $dbPass);
$parms=array(12, 45, 65, 33);
$st=$dbh->prepare(sprintf('SELECT age, name FROM people WHERE id IN (%s)',
                          implode(',',array_fill(0,count($parms),'?'))));
$st->execute($parms);


 类似资料:
  • 问题内容: 我想知道是否仍然可以使用准备好的语句指定返回的列名称。 我正在使用MySQL和Java。 当我尝试时: 我得到了这种类型的语句(在执行之前立即打印)。 但我希望看到: 我知道,我不能为表名这样做,因为讨论 这里,但不知道是否有一些方法来做到这一点对列名。 如果没有,那么我只需要尝试确保对输入进行清理,以免导致SQL注入漏洞。 问题答案: 这表明数据库设计不正确。用户不需要知道列名。创建

  • 问题内容: 我想知道是否仍然可以使用准备好的语句指定返回的列名。 我正在使用MySQL和Java。 当我尝试时: 我得到了这种类型的语句(在执行之前立即打印)。 我希望看到: 我知道,我不能为表名这样做,因为讨论 这里,但不知道是否有一些方法来做到这一点对列名。 如果没有,那么我将只需要尝试确保对输入进行清理,以免导致SQL注入漏洞。 问题答案: 这表明数据库设计不正确。用户不需要知道列名。创建一

  • 问题内容: 这可能是一个愚蠢的问题,但是这里有: 是否可以制作一个动态表,使其能够包含具有可变列数和自定义列名的行? 我浏览了EAV建模,但看起来很沉重。一个真实的例子可能是这样的: 假设我有一个客户登记册。但是每个客户可能要输入不同的信息。并且取决于您要输入的内容,它应该反映在数据库中。(即每个客户都有不同的列) 这是不可能/可能吗? 更新: 标准方法(即, 具有一个包含所有需要的列的表,并且仅

  • 我在调试中不断看到这个错误。登录cassandra, 在这个里面 因此,根据Cassandra中的这个标签,https://github . com/krasserm/akka-persistence-Cassandra/issues/33,我看到这是由于输入有效负载大小的增加,所以我将cassandra.yml中的< code > commit log _ segment _ size _ in

  • 问题内容: 我有一个从MySQL数据库填充的可变大小(长度)的表单。有4个字段构成了用于创建按钮的信息(id,button#,名称和价格)。提交表单后,我想将所有值保存到MySQl db并用成功消息更新页面底部的div。对于其他所有页面,我都使用类似… PHP文件保存数据并为div生成消息。并写信给div 这对于我所有其他页面都很好,但是由于我不知道会有多少字段,因此我无法对xmlhttp.ope

  • 我有两个表:Person(person_id,name)和另一个表Contacts(person_id,phone_type,phone_no)。 例如,contacts表的行被透视以形成视图的列(列的数量将根据'phone_types'列的不同值而变化)。 有什么方法可以透视contacts表,但使用动态pivot-in-sublic,类似