如何使用多个 for 循环在 php 中创建 sql 语句
Posted
技术标签:
【中文标题】如何使用多个 for 循环在 php 中创建 sql 语句【英文标题】:How can I use multiple for loops to create an sql statement in php 【发布时间】:2021-10-08 14:18:32 【问题描述】:我正在一个网站上工作,我可以通过多种不同的形式接受用户数据以更新数据库中的表,而不是为每个表编写单独的函数,我认为使用字符串连接和 for 循环编写是个好主意为我准备的 SQL 语句。基本上它需要 4 个参数,一个表、id、需要更新的列(参数)和一个用户输入数组。我相信我非常接近我需要的东西,但它无法执行并给我一个错误
SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 1 行的 '(
name
,comment
) VALUES ('sadf','asdf') WHEREmusic_work_ID
=14' 附近使用正确的语法
这是我打印出 $sql 时显示的内容,
sql = UPDATE music_work SET (
name
,comment
) VALUES (:name,:comment) WHEREmusic_work_ID
=14
我不知道是否有更好的方法来创建这样的东西,或者我没有使用正确的语法,但现在我陷入了僵局。
function music_work_update($userInput, $userID_selection)
foreach ($userInput as $k => $v)
if($userInput[$k] === '')
unset($userInput[$k]);
update("music_work", $userID_selection, ["name", "comment"], $userInput);
function update($table, $userID_selection, $params, $input)
$conn = connect();
try
$sql = "UPDATE ".$table." SET (";
for ($i = 0; $i < sizeof($params); $i++)
$sql .= "`".$params[$i]."`,";
$sql = substr_replace($sql ,"", -1);
$sql .= ") VALUES ( ";
for ($i = 0; $i < sizeof($params); $i++)
$sql .= ":".$params[$i].",";
$sql = substr_replace($sql ,"", -1);
$sql .= ") WHERE `music_work_ID`=$userID_selection";
echo ("sql = $sql <br>");
$command = $conn->prepare($sql);
for ($i = 0; $i < sizeof($params); $i++)
$command->bindParam(':'.$params[$i], $input[$params[$i]], PDO::PARAM_STR);
if ($command->execute())
echo "<script type= 'text/javascript'>alert('New Record Inserted Successfully');</script>";
else
echo "<script type= 'text/javascript'>alert('Data not successfully Inserted.');</script>";
echo "failed before execute";
$conn = null;
catch(PDOException $e)
echo ($e->getMessage());
【问题讨论】:
该查询对 SQL 注入开放。为什么要绑定除一个用户提供的变量之外的所有变量? 【参考方案1】:您混淆了多个 INSERT INTO 和多个 UPDATE。
对于多个 UPDATE 使用:
UPDATE music_work SET name = x, comment = y WHERE id = z;
对于多个 INSERT INTO:
INSERT INTO table_name (column_list)
VALUES
(value_list_1),
(value_list_2);
【讨论】:
以上是关于如何使用多个 for 循环在 php 中创建 sql 语句的主要内容,如果未能解决你的问题,请参考以下文章
在 for 循环中使用 udf 在 Pyspark 中创建多个列
For 循环无法在 Adobe Animate CC 中创建多个矩形
在 for 循环中在 django admin 中创建另一个模型对象