我有一个sql插入脚本,当用户在文本区域中键入文本时更新数据库中的sql表,但如果用户在其文本中使用撇号,则不会将信息插入表中。这是因为sql将撇号作为结束语句或其他内容读取。但有没有办法使用一个允许用户输入撇号的语句,即告诉sql使用'%s%'或其他代表撇号?
继承我正在使用的sql更新代码:
<?php
session_start();
include '_config/connection.php';
$status = $_POST['status'];
$result = mysql_query("SELECT status FROM ptb_profiles WHERE id=".$_SESSION['user_id']."");
if(!$result)
{
echo "The username you entered does not exist";
}
else
if($status!= mysql_result($result, 0))
{
echo "";
$sql=mysql_query("UPDATE ptb_profiles SET status ='$status' WHERE id=".$_SESSION['user_id']."");
}
if($sql)
{
}
header('Location: http://localhost/ptb1/profile.php?id=' . $_SESSION['user_id'] );
?>
答案 0 :(得分:2)
难道你不能逃脱撇号吗?将数据推送到mysql_query()
时使用mysql_real_escape_string()
是标准做法。
答案 1 :(得分:0)
更小的更改并重写一行代码 -
$sql=mysql_query('UPDATE ptb_profiles SET status ="'. mysql_real_escape_string($status) .'" WHERE id='.$_SESSION['user_id']);
答案 2 :(得分:0)
改变这个:
$sql=mysql_query("UPDATE ptb_profiles SET status ='$status' WHERE id=".$_SESSION['user_id']."");
到此:
$sql=mysql_query('UPDATE ptb_profiles SET status ="'. mysql_real_escape_string($status) .'" WHERE id='.$_SESSION['user_id']);
P.S。永远不要将变量直接从$ _POST或$ _GET或$ _REQUEST直接插入到SQL中,否则最终会出现SQL注入漏洞。