php – 如何使用mysqli编写一个安全的SELECT查询,该查询具有可变数量的用户提供的值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何使用mysqli编写一个安全的SELECT查询,该查询具有可变数量的用户提供的值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3020字,纯文字阅读大概需要5分钟。
内容图文
![php – 如何使用mysqli编写一个安全的SELECT查询,该查询具有可变数量的用户提供的值?](/upload/InfoBanner/zyjiaocheng/889/7393ec62608a4844991bce5da88333d1.jpg)
我希望得到一些帮助来执行我的代码中的foreach.
我将多个值发布到用户名:as username [0] = user1,user2
但我的foreach给我的结果只有最后一个条目或没有.
$companyname = $_POST['companyname'];
$username_grab = $_POST['username'];
$username = implode(",", $username_grab);
foreach ($username_grab as $value){
$value = $username_grab;
$sql = "select * from linked_user where username = '$value' and company_name = '$companyname'";
$res = mysqli_query($conn,$value);
while($row = mysqli_fetch_array($res)){
$returnValue['username'] = $row['username'];
$returnValue['user_scid'] = $row['user_scid'];
}
}
echo json_encode($returnValue);
?>
解决方法:
您要执行的任务是具有可变数量占位符的预准备语句.这在PDO中更简单,但我将向您展示mysqli面向对象的样式方法.无论如何,始终打印一个json编码数组,以便您的接收脚本知道所期望的数据类型.
我有一个片段,包括一整套诊断和错误检查.我没有测试过这个脚本,但它与this post of mine非常相似.
if (empty($_POST['companyname']) || empty($_POST['username'])) { // perform any validations here before doing any other processing
exit(json_encode([]));
}
$config = ['localhost', 'root', '', 'dbname']; // your connection credentials or use an include file
$values = array_merge([$_POST['companyname']], explode(',', $_POST['username'])); // create 1-dim array of dynamic length
$count = sizeof($values);
$placeholders = implode(',', array_fill(0, $count - 1, '?')); // -1 because companyname placeholder is manually written into query
$param_types = str_repeat('s', $count);
if (!$conn = new mysqli(...$config)) {
exit(json_encode("MySQL Connection Error: <b>Check config values</b>")); // $conn->connect_error
}
if (!$stmt = $conn->prepare("SELECT user_scid, user_scid FROM linked_user WHERE company_name = ? AND username IN ({$placeholders})")) {
exit(json_encode("MySQL Query Syntax Error: <b>Failed to prepare query</b>")); // $conn->error
}
if (!$stmt->bind_param($param_types, ...$values)) {
exit(json_encode("MySQL Query Syntax Error: <b>Failed to bind placeholders and data</b>")); // $stmt->error;
}
if (!$stmt->execute()) {
exit(json_encode("MySQL Query Syntax Error: <b>Execution of prepared statement failed.</b>")); // $stmt->error;
}
if (!$result = $stmt->get_result()) {
exit(json_encode("MySQL Query Syntax Error: <b>Get Result failed.</b>")); // $stmt->error;
}
exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));
如果你不想要所有那些诊断条件和注释的膨胀,这里是相同的裸骨应该执行相同的:
if (empty($_POST['companyname']) || empty($_POST['username'])) {
exit(json_encode([]));
}
$values = explode(',', $_POST['username']);
$values[] = $_POST['companyname'];
$count = count($values);
$placeholders = implode(',', array_fill(0, $count - 1, '?'));
$param_types = str_repeat('s', $count);
$conn = new mysqli('localhost', 'root', '', 'dbname');
$stmt = $conn->prepare("SELECT user_scid, user_scid FROM linked_user WHERE username IN ({$placeholders}) AND company_name = ?");
$stmt->bind_param($param_types, ...$values);
$stmt->execute();
$result = $stmt->get_result();
exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));
内容总结
以上是互联网集市为您收集整理的php – 如何使用mysqli编写一个安全的SELECT查询,该查询具有可变数量的用户提供的值?全部内容,希望文章能够帮你解决php – 如何使用mysqli编写一个安全的SELECT查询,该查询具有可变数量的用户提供的值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。