我目前正在使用以下插入查询来使用 php 更新 mysql 中的值:
$UpdateQuery = "UPDATE `mysqldb`.`cu_data` SET
`app_status` = '".$_POST['Est']."',
`nacionalidad` = '".$_POST['Nac']."',
`ciudad_ini` = '".$_POST['CiudadI']."',
`ciudad_ent` = '".$_POST['CiudadE']."',
`ciudad_dest` = '".$_POST['CiudadD']."',
`ciudad_land` = '".$_POST['PEntrada']."',
`uso_consr` = '".$_POST['U_Abog']."',
`start` = '".$_POST['Envi']."',
`t1` = '".$_POST['Cob']."',
`t2` = '".$_POST['Acus']."',
`t3` = '".$_POST['Invit']."',
`t4` = '".$_POST['Entre']."',
`t5` = '".$_POST['Recibo']."',
`t6` = '".$_POST['EnvioF)']."',
`t7` = '".$_POST['DatInternet']."',
`t8` = '".$_POST['SoliMed']."',
`t9` = '".$_POST['OrdeMe']."',
`t10` = '".$_POST['SoliciPasa']."',
`t11` = '".$_POST['EnvioPasas']."',
`t12` = '".$_POST['RecepPasa']."',
`end` = '".$_POST['Landing']."',
`Notas` = '".$_POST['Notas']."',
`LastChange` = NOW()
WHERE `cu_data`.`procid` = '".$_POST['Proceso']."' AND
`cu_data`.`userid` = '$userid'
";
$result = mysqli_query($con, $UpdateQuery);
代码正在运行,但现在我担心 sql inyections(不仅是坏的类型,还有用户在任何表单字段中包含分号)
我正在考虑使用 mysql_real_escape_string 进行某种转义(正如该问题的第二个投票最多的答案中所建议的那样),但后来我在评论中看到了一些陷阱(而且我很难理解投票最多的一个)。
有小费吗?
提前致谢
Ps:至少对于最后一个字段(notas)我需要用户输入任何符号,例如 ($ # % ; : ,.>
编辑:
我确实看过建议的答案(抱歉,我不喜欢原始问题中的另一个 SO 答案)。因此,为了不重复,我能否要求提供有关如何对更新查询执行 PDO 操作的线索,就像我在上面显示的那样?(我的 php 来自 mysql_ 时代!)
已编辑(2):好的,所以这个问题已被标记为重复,但我不同意所选答案(显示在此问题之后的答案已在此处有答案:因为这是我在问此问题之前阅读的答案) . 我确实在这里找到了另一个看起来更有趣的(至少对我来说):用 PDO 和准备好的语句替换 mysql_* 函数(当然,一旦知道 PHP 数据对象,也就是我不是
编辑(3):嗯,我得到这个工作如下:
$UpdateQuery1 = "UPDATE `mysqldb`.`cu_data` SET
`app_status` = ?,
`nacionalidad` = ?,
`ciudad_ini` = ?,
`ciudad_ent` = ?,
`ciudad_dest` = ?,
`ciudad_land` = ?,
`uso_consr` = ?,
`start` = ?,
`t1` = ?,
`t2` = ?,
`t3` = ?,
`t4` = ?,
`t5` = ?,
`t6` = ?,
`t7` = ?,
`t8` = ?,
`t9` = ?,
`t10` = ?,
`t11` = ?,
`t12` = ?,
`end` = ?,
`Notas` = ?,
`LastChange` = NOW()
WHERE `cu_data`.`procid` = ? AND
`cu_data`.`userid` = ?";
$stmt = $con->prepare($UpdateQuery1);
$stmt->bind_param('ssssssssssssssssssssssss',
$_POST['Estatus'],$_POST['Nacionalidad'],$_POST['CiudadI'],$_POST['CiudadE'],$_POST['CiudadD'],
$_POST['PEntrada'],$_POST['Uso_Abog'],$_POST['Envi'],$_POST['Cobro_de_Fee'],
$_POST['Acus'],$_POST['Invit'],$_POST['Entre'],$_POST['Recibo'],$_POST['EnvioF'],
$_POST['DatInternet'],$_POST['SoliMed'],$_POST['OrdeMe'],$_POST['SoliciPasa'],
$_POST['EnvioPasa'],$_POST['RecepPasa'],$_POST['Landing'],$_POST['Notas'],
$_POST['Proceso'],$userid);
$stmt->execute();
作为奖励,我的字段 Notas 似乎能够保存任何文本,而无需转义特殊字符