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

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 に任せましょう。

于 2013-05-03T15:45:31.033 に答える
0

textデータベース内の列のサイズは? それはほとんどの理由ではありませんが、あなた$text190文字の長さであることに気付きました.

于 2013-05-03T15:57:21.137 に答える
0

データベースライブラリを混在させているか、自分でラップしているように見えます。

->query()呼び出しにmysqli や PDO などを使用している場合は、機能しmysql_real_escape_string()ませ。m_r_e_s() が動作するには、DB へのアクティブな接続が必要です。mysql、mysqli、および PDO で確立された接続は、ライブラリ間で共有できません。

これは、m_r_e_s() 呼び出しが失敗した場合にブール値の FALSE を返すことを意味し、クエリは実際には次のようになります。

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