1

这是困扰我的插入代码的一部分:

$recepient="test@email.com";
$text="Please track: http://wwwapps.ups.com/WebTracking/processInputRequest?HTMLVersion=5.0&loc=en_US&Requester=UPSHome&tracknum=123456789&AgreeToTermsAndConditions=yes&ignore=&track.x=24&track.y=9";
$date="2013-05-03 08:12:20"; 
$through="mail";
$status=1;
$q = "INSERT INTO `messages` (`recepient`,`text`,`date`,`through`,`status`) VALUES('".mysql_real_escape_string($to)."','".mysql_real_escape_string($text)."','".date("Y-m-d H:i:s")."','".mysql_real_escape_string($rowuser['through'])."','".intval($status)."')";
try {$db->query($q);} catch(PDOException $ex) {echp" Error: ".$ex.);}

如果我从 $text 变量中删除链接,我可以看到添加到数据库中的数据。但是以我需要它添加链接的方式 - 脚本停止不报告任何错误。

4

4 回答 4

0

text数据库中列的大小是多少?这主要不是原因,但我注意到你的$text长度是190 个字符。

于 2013-05-03T15:57:21.137 回答
0

看起来您正在混合数据库库,或者自己包装了一些东西。

如果您使用 mysqli 或 PDO 之类的东西进行->query()调用,那么mysql_real_escape_string()无法正常工作。m_r_e_s() 需要与数据库的活动连接才能运行。在 mysql、mysqli 和 PDO 中建立的连接在库之间不可共享。

这意味着您的 m_r_e_s() 调用将返回布尔值 FALSE 以表示失败,并且您的查询实际上如下所示:

$q = "INSERT .... VAALUES ('', '', '', etc...)";
于 2013-05-03T15:48:33.550 回答
0

问题在于“?” 登录$text变量。当它被放入查询时,它被视为占位符,并且 $db->query 需要一个变量数组。解决方案是使用占位符而不是$text变量并将$text变量作为参数提交:

$ar[0]=$text;
$q = "INSERT INTO `messages` (`recepient`,`text`,`date`,`through`,`status`)";
$q.= " VALUES('".$to."',?,'".date("Y-m-d H:i:s")."','".$through."',".$status.")";
$db->query($q,$ar);
于 2013-05-06T01:02:45.707 回答
0

usePDO强大的预处理语句

$q  = "INSERT INTO messages (recepient,text,date,through,status) ";
$q .= "VALUES (:to,:text,:date,:through,:status)";

$dbinsert = $db->prepare($q);
$dbinsert->execute(array(
    ':to' => $recipient,
    ':text' => $text,
    ':date' => $date,
    ':through' => $through,
    ':status' => $status));

这应该这样做。
让 PDO 负责转义。

于 2013-05-03T15:45:31.033 回答