gpt4 book ai didi

PHP sql注入(inject)和函数中参数的自定义数量

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:43 26 4
gpt4 key购买 nike

大家好:我想参数化我的查询,创建一个函数来接收我的查询、连接和数组,参数表示为“?”。我的功能是:

receiveQuery($query, $mysqli1, $array1)

我读过有关 sql 注入(inject)的文章,我想知道这是否是避免这些问题的正确方法。我计划将此函数用于 INSERT、DELETE、UPDATE 和 SELECT。另外,我希望您能指导我如何为超过 1 个参数创建更好的处理,因为目前我正在使用开关。但每次我需要更多参数时,我都会增加开关,我想以动态方式创建它。

SWITCH ($array1Length)

任何评论都是有帮助的,问候。菲利普

<?php
$mysqli1 = openConn();
$query = "INSERT INTO tblTest (field1 , field2 ) VALUES (?,?)";
$array1 = array($value1, $value2);
$result = receiveQuery($query, $mysqli1, $array1);
if($stmt->affected_rows == 1)
{
$success = "Success.";
}
if($stmt->affected_rows == -1)
{
$error = "Error.";
}
closeConn($stmt);
closeConn($mysqli1);

function openConn()
{
$mysqli1 = new mysqli('localhost', 'userTest', '123', 'dbTest');
if ($mysqli1->connect_error) {
die('Connect Error (' . $mysqli1->connect_errno . ') '
. $mysqli1->connect_error);
}
return $mysqli1;
}

function receiveQuery($query, $mysqli1, $array1)
{
global $stmt;
$stmt = $mysqli1->prepare($query);
if (false===$stmt)
{
echo $mysqli1->error;
die('Error');
}
$array1Length = count($array1);
SWITCH ($array1Length)
{
CASE 0: break;
CASE 1: $stmt->bind_param("s" , $array1[0]) ;break;
CASE 2: $stmt->bind_param("ss" , $array1[0],$array1[1]) ;break;
CASE 3: $stmt->bind_param("sss" , $array1[0],$array1[1],$array1[2]) ;break;
CASE 4: $stmt->bind_param("ssss", $array1[0],$array1[1],$array1[2],$array1[3]);break;
DEFAULT : echo "Error";
}
$stmt->execute();
$result = $stmt->get_result();

return $result;
}

function closeConn($mysqli1)
{
$mysqli1->close();
}

?>

最佳答案

您应该能够在数组上使用 splat 运算符。

$s = '';
for ($x = 0; $x < count($params); $x ++) {
$s .= 's';
}

$stmt->bind_param($s, ...$params);

https://secure.php.net/manual/en/migration56.new-features.php

关于PHP sql注入(inject)和函数中参数的自定义数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682110/

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