无法将多条记录更新到mysql
Posted
技术标签:
【中文标题】无法将多条记录更新到mysql【英文标题】:Unable to update multiple records into mysql 【发布时间】:2019-08-14 01:45:55 【问题描述】:无法通过在php中使用foreach将多条记录更新到mysql中,出现以下错误;
foreach( $_POST['edit'] AS $edit )
$fromdate=mysql_real_escape_string($_POST['fromdate'][$edit]);
$todate=mysql_real_escape_string($_POST['todate'][$edit]);
$total=mysql_real_escape_string($_POST['total'][$edit]);
$ampm=mysql_real_escape_string($_POST['ampm'][$edit]);
$Update_leavedetails .= "UPDATE leaverequestdetails SET fromdate='$fromdate', " . "todate='$todate',total='$total',ampm='$ampm' " . "WHERE tranid = '$edit';";
if(!mysql_query($Update_leavedetails))
die('Invaild query: ' . mysql_error());
else
.....
无效查询:您的 SQL 语法有错误;检查手册 对应于正确语法的 MariaDB 服务器版本 在'UPDATE leaverequestdetails SET fromdate='2019-08-26'附近使用, todate='2019-08-26',total=' 在第 1 行
【问题讨论】:
【参考方案1】:您正尝试一次运行多个查询,mysql_query
不支持。您需要将查询的执行带入循环,即
foreach( $_POST['edit'] AS $edit )
$fromdate=mysql_real_escape_string($_POST['fromdate'][$edit]);
$todate=mysql_real_escape_string($_POST['todate'][$edit]);
$total=mysql_real_escape_string($_POST['total'][$edit]);
$ampm=mysql_real_escape_string($_POST['ampm'][$edit]);
$Update_leavedetails = "UPDATE leaverequestdetails SET fromdate='$fromdate', ".
"todate='$todate',total='$total',ampm='$ampm' ".
"WHERE tranid = '$edit';";
if(!mysql_query($Update_leavedetails))
die('Invalid query: ' . mysql_error());
你真的需要停止使用mysql_*
接口,它自 PHP5.5 起已被弃用,自 PHP7 起已被删除。升级到mysqli
(this question 可以提供帮助)或者更好的是PDO
(this question 可以提供帮助)。在此过程中,更改为准备好的语句(MySQLi 或 PDO),它们将比mysql_real_escape_string
更好地防止注入。
使用 MySQLi 准备好的语句,你会写
$stmt = $link->prepare("UPDATE leaverequestdetails SET fromdate=?, todate=?,total=?,ampm=? WHERE tranid = ?");
foreach( $_POST['edit'] AS $edit )
$stmt->bind_param("ssssi", $_POST['fromdate'][$edit], $_POST['todate'][$edit], $_POST['total'][$edit], $_POST['ampm'][$edit], $edit);
if (!$stmt->execute()) die($stmt->error);
【讨论】:
请记住,您的应用程序不应因错误消息而死掉。这可能是一个巨大的安全问题。 @Dharman 这是一个公平的评论,我假设(可能没有任何理由)OP 会在投入生产之前处理这个问题。但是 OP 的原始代码已经在里面了,我试图做尽可能少的更改。以上是关于无法将多条记录更新到mysql的主要内容,如果未能解决你的问题,请参考以下文章