【发布时间】:2023-04-08 23:27:01
【问题描述】:
当我需要更改页面上的信息时,我正在编写一个脚本来更新数据库,如果文本中没有特殊字符(例如 ' 或 " ),脚本可以正常工作,如果有任何特殊字符我得到一个这样的错误
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解正确的语法以使用接近“愤怒”的歌曲,音乐会煽动周围的角色变得更具攻击性。在第 1 行
我希望得到帮助,看看我在这个脚本中可能遗漏了什么,提前感谢您抽出宝贵的时间。
用于选择要更新的数据的初始页面
<?php
include('../connect/connect-mysql.php');
$sql="SELECT * FROM table Order by Appeared asc";
$result=mysql_query($sql);
?>
<h4>Update/Edit Tool</h4>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>
<table width="400" border="1" cellspacing="0" cellpadding="3">
<tr>
<th align="center"><font face="Verdana" size="1">Update</font></th>
<th align="center"><font face="Verdana" size="1">Power</font></th>
<th align="center"><font face="Verdana" size="1">Power2</font></th>
<th align="center"><font face="Verdana" size="1">Power3</font></th>
<th align="center"><font face="Verdana" size="1">Power4</font></th>
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><font face="Verdana" size="1"><a href="p_update.php?id=<? echo $rows['IDNumber']; ?>">update</a></font></td>
<td><font face="Verdana" size="1"><div style="height:20px; width:160px; overflow:hidden"><? echo $rows['Power']; ?></div></font></td>
<td><font face="Verdana" size="1"><div style="height:20px; width:160px; overflow:hidden"><? echo $rows['Power2']; ?></div></font></td>
<td><font face="Verdana" size="1"><div style="height:20px; width:160px; overflow:hidden"><? echo $rows['Power3']; ?></div></font></td>
<td><font face="Verdana" size="1"><div style="height:20px; width:160px; overflow:hidden"><? echo $rows['Power4']; ?></div></font></td>
</tr>
<?php
}
?>
</table>
编辑页面(p_update.php):
$id=$_GET['id'];
$sql="SELECT * FROM table WHERE IDNumber='$id'";
$result=mysql_query($sql) or die(mysql_error());
$rows=mysql_fetch_array($result);
?>
<body>
<h1>Update Data</h1>
<form name="form1" method="post" action="p_update_ac.php">
<fieldset>
<legend>Update Data</legend>
<table border="1" width="100%" style="border-collapse: collapse">
<tr><th><font face="Verdana" size="1"><label>Database ID: </label></font></th><td><font size="1" face="Verdana"><input name="IDNumber" type="text" id="IDNumber" value="<?php echo $rows['IDNumber']; ?>" size="10"><b>DO NOT CHANGE THIS FIELD</b></font></td></tr>
<tr><th><font face="Verdana" size="1"><label>Power Category: </label></font></th><td><font size="1" face="Verdana"><input name="Powcategory" type="text" id="Powcategory" value="<?php echo $rows['Powcategory']; ?>" size="50"></font></td></tr>
<tr><th><font face="Verdana" size="1"><label>Power: </label></font></th><td><font size="1" face="Verdana"><input name="Power" type="text" id="Power" value="<?php echo $rows['Power']; ?>" size="150"></font></td></tr>
<tr><th><font face="Verdana" size="1"><label>Power 2: </label></font></th><td><font size="1" face="Verdana"><input name="Power2" type="text" id="Power2" value="<?php echo $rows['Power2']; ?>" size="150"></font></td></tr>
<tr><th><font face="Verdana" size="1"><label>Power 3: </label></font></th><td><font size="1" face="Verdana"><input name="Power3" type="text" id="Power3" value="<?php echo $rows['Power3']; ?>" size="150"></font></td></tr>
<tr><th><font face="Verdana" size="1"><label>Power 4: </label></font></th><td><font size="1" face="Verdana"><input name="Power4" type="text" id="Power4" value="<?php echo $rows['Power4']; ?>" size="150"></font></td></tr>
</table>
</fieldset>
<br>
<input name="id" type="hidden" id="id" value="<?php echo $rows['id']; ?>"><input type="submit" name="Submit" value="Update Record">
</form>
<?php
// close connection
mysql_close();
?>
以下代码是p_update_ac.php,由p_update.php 脚本调用以运行。
<?php
include('../connect/connect-mysql.php');
$IDNumber = mysqli_real_escape_string($dbcon, $_POST['IDNumber']);
$Power = mysqli_real_escape_string($dbcon, $_POST['Power']);
$Power2 = mysqli_real_escape_string($dbcon, $_POST['Power2']);
$Power3 = mysqli_real_escape_string($dbcon, $_POST['Power3']);
$Power4 = mysqli_real_escape_string($dbcon, $_POST['Power4']);
$sql="UPDATE table SET Power='$Power',Power2='$Power2',Power3='$Power3',Power4='$Power4' WHERE IDNumber='$IDNumber'";
$result=mysql_query($sql) or die(mysql_error());
if($result){
echo "Successful";
echo "<p>";
echo "<a href='p_list_records.php'>View result</a>";
}
else {
echo "ERROR";
}
?>
【问题讨论】:
-
你到底为什么要逃避
$IDNumber两次? ) -
你为什么要逃避你的身份证号码两次?
-
...这是我想到的第一个想法,对。 ) 但是这里有太多的奇怪之处。为什么在第一个文件
$ID...中没有转义?为什么不检查$_POST[...]参数是否已设置?最后,为什么没有准备好的陈述? ) -
$IDNumber = mysqli_real_escape_string($dbcon, mysqli_real_escape_string($dbcon, $_POST['IDNumber']);他们的意思是,有 2 个 mysqli_escape_string 所以你要转义两次 -
您可以通过使用准备好的语句来避免所有这些丑陋和容易出错的代码!这将使您的生活更轻松、更安全。