0

我有一个 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'] );
?>
4

3 回答 3

2

你就不能避开撇号吗?mysql_real_escape_string()这是将数据推送到mysql_query()s时使用的标准做法。

于 2012-11-05T06:16:33.660 回答
0

小改动,改写一行代码——

$sql=mysql_query('UPDATE ptb_profiles SET status ="'. mysql_real_escape_string($status) .'" WHERE id='.$_SESSION['user_id']);
于 2012-11-05T06:16:16.960 回答
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']);

PS 永远不要直接将来自 $_POST 或 $_GET 或 $_REQUEST 的变量直接插入到您的 SQL 中,否则您最终会遇到 SQL 注入漏洞。

于 2012-11-05T06:18:52.917 回答