【问题标题】:Can't insert link into mysql database无法将链接插入mysql数据库
【发布时间】:2013-04-28 01:45:30
【问题描述】:

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

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

【问题讨论】:

  • 对不起变量混乱:recepient=to,但这里的想法只是关于 $text 变量。
  • 能不能提供函数mysql_real_escape_string
  • @David Starkey - From php.net
  • 据我所知,PDO 不需要mysql_real_escape_string,因此请尝试不使用参数和准备好的语句。
  • @Vasiliy - 什么是数据库结构? text 字段有多大?

标签: php sql hyperlink insert


【解决方案1】:

使用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 负责转义。

【讨论】:

  • text中使用短文本或链接的情况下,该查询都对我不起作用
  • 看起来这是问题的解决方案,但我无法让它工作,它在$db->prepare停止了
  • @Vasily 当然,您需要设置 PDO 以连接到您的数据库。你这样做了吗?
  • 问题是我正在开发一个不是我自己编写的系统。
【解决方案2】:

您似乎在混合数据库库,或者自己包装了一些东西。

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

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

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

【讨论】:

  • 它会只为包含链接的文本返回 false 吗?因为它与“测试文本”之类的文本完美搭配。
  • 我删除了 m_r_e_s 请求,但仍然没有帮助。但是我设法发现了一个错误: Query parts != Params parts: q:0; p:1
【解决方案3】:

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

【讨论】:

  • text 列没有长度限制。此外,我尝试的第一件事是通过 phpmyadmin SQL 查询添加数据,它工作正常。
  • 哦,我不确定您是否将其类型设置为文本,抱歉
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 2015-07-22
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    相关资源
    最近更新 更多