0

这个让我难住了。当我尝试将某些内容保存到包含撇号 (') 的数据库中时,它会一直保存 sence 直到那时它不会保存。例如;

假设我正在尝试保存:报告详细信息蒂姆库克在 Apple 的变化,无论好坏 »

它节省:报告细节蒂姆库克

它可以很好地保存到数据库中,但只保存 ' 之前的所有内容

我的代码:

if(isset($_POST['submit']))
{
global $db, $db_table_prefix;


$origRLTitle = $_POST['RLTitle'];
$origRLURL = $_POST['RLURL'];
$origRLUserID = $_POST['user-id'];

$RLTitle = mysql_real_escape_string($origRLTitle);
$RLURL = mysql_real_escape_string($origRLURL);
$RLUserID = mysql_real_escape_string($origRLUserID);    


if(strlen($RLTitle)>0 && strlen($RLURL)>0 && strlen($RLUserID)>0)
{
mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
mysql_select_db("sf") or die(mysql_error());
mysql_query("INSERT  INTO `ReadLater` (Title, URL, User_ID) VALUES ('".$RLTitle."', '".$RLURL."', '".$RLUserID."')");
echo "Saved";
}
}

关于为什么它可能无法正确保存的任何帮助?我已经尝试过 mysql_real_escape_string 但是(如果我使用正确的话)这似乎不起作用。

旁注:保护上述表单免受攻击的最佳方法是什么?

更新它也在为 " 做这件事。

4

2 回答 2

1

您需要在连接到数据库mysql_real_escape_string() 后调用:

if(isset($_POST['submit']))
{
    global $db, $db_table_prefix;


    $origRLTitle = $_POST['RLTitle'];
    $origRLURL = $_POST['RLURL'];
    $origRLUserID = $_POST['user-id'];
    mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
    mysql_select_db("sf") or die(mysql_error());

    $RLTitle = mysql_real_escape_string($origRLTitle);
    $RLURL = mysql_real_escape_string($origRLURL);
    $RLUserID = mysql_real_escape_string($origRLUserID);    


    if(strlen($RLTitle)>0 && strlen($RLURL)>0 && strlen($RLUserID)>0)
    {
        mysql_query("INSERT  INTO `ReadLater` (Title, URL, User_ID) VALUES ('".$RLTitle."', '".$RLURL."', '".$RLUserID."')");
        echo "Saved";
    }
}
于 2012-05-25T15:49:59.137 回答
0

改变

mysql_query("INSERT  INTO `ReadLater` (Title, URL, User_ID) VALUES ('".$RLTitle."', '".$RLURL."', '".$RLUserID."')");

$query = "INSERT  INTO `ReadLater` (Title, URL, User_ID) VALUES ('".$RLTitle."', '".$RLURL."', '".$RLUserID."')";
echo $query;
mysql_query($query);

并检查您发送的实际查询,然后很容易发现问题:)

于 2012-05-25T16:24:53.163 回答