2013-05-03 53 views
1

这里是我的插入代码的一部分是困扰我:无法插入链接到MySQL数据库

$recepient="[email protected]"; 
$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.);} 

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

+0

很抱歉的变量烂摊子:recepient =,但这个想法是只有约$ text变量在这里。 – Vasiliy 2013-05-03 15:33:13

+0

可以提供函数'mysql_real_escape_string' – 2013-05-03 15:36:44

+0

@David Starkey - [From php.net](http://php.net/manual/en/function.mysql-real-escape-string.php) – 2013-05-03 15:38:45

回答

0

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

$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); 
0

使用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照顾逃跑。

+0

对于我来说,这个查询对我来说都不适用,在短文本或'text'中的链接中。 – Vasiliy 2013-05-04 08:46:57

+0

看起来这是问题的解决方案,但是我无法使它工作,它在$ db->准备' – Vasiliy 2013-05-04 13:44:27

+0

@当然,你需要设置PDO来连接你的数据库。是你做的吗? – michi 2013-05-05 10:01:11

0

这似乎是你混合数据库库,或自己包装的东西。

如果您使用的是mysqli或PDO为​​致电,那么mysql_real_escape_string()NOT工作。 m_r_e_s()需要一个到DB的活动连接才能运行。在mysql,mysqli和PDO中建立的连接是NOT可在库之间共享。

这意味着您的m_r_e_s()调用将返回一个布尔值FALSE失败,和您的查询,实际上是这样的:

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

只有包含链接的文本才会返回false吗?因为它可以像“测试文本”一样完美地工作。 – Vasiliy 2013-05-04 08:13:20

+0

我删除了m_r_e_s请求,但仍然没有帮助。但是我设法发现一个错误:查询部分!= Params部分:q:0; p:1 – Vasiliy 2013-05-04 08:31:17

0

什么是在数据库中的text列的大小?这主要不是原因,但我注意到,你的$text是 char long。

+0

“text”列没有长度限制。此外,我尝试的第一件事是通过phpmyadmin SQL查询添加数据,它工作正常。 – Vasiliy 2013-05-04 04:58:04

+0

哦,我不确定你是否将它的类型设置为文本,对不起 – 2013-05-04 05:06:54

+0

谢谢你的尝试! :) – Vasiliy 2013-05-04 11:03:23