不能在mysql数据库中插入链接


Can't insert link into mysql database

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

$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变量中删除链接,我可以看到添加到数据库中的数据。但在我需要它添加链接的方式-脚本停止不报告任何错误。

使用PDO强大的预处理语句:

$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负责转义

这看起来像是你混合了数据库库,或者你自己包装了东西。

如果你正在使用类似mysqli或PDO的->query()调用,那么mysql_real_escape_string()工作。m_re_s()需要一个与DB的活动连接才能运行。在mysql, mysqli和PDO中建立的连接不能在库之间共享

这意味着你的m_re_s()调用将返回一个布尔值FALSE失败,你的查询实际上看起来像:

$q = "INSERT .... VAALUES ('', '', '', etc...)";

数据库中text列的大小是多少?这主要不是原因,但我注意到你的$text190 char long.

问题是与"?符号在$text变量中。当它被放入查询中时,它被视为占位符,并且$db->查询需要一个变量数组。解决方案是使用占位符代替$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);