2

Twilio からの SMS のコンテンツを mysql に挿入しようとしています。下部の応答は正しく返されますが、データが mysql に挿入されていません。何が欠けているのかわかりません。何か助けはありますか?

<?php
header("content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";

$From = $_REQUEST['From'];
$To = $_REQUEST['To'];
$Body = $_REQUEST['Body'];

$host="host"; // Host name 
$username="user"; // Mysql username 
$password="password"; // Mysql password 
$db_name="database_name"; // Database name 
$tbl_name="table"; // Table name

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$sql="INSERT INTO $tbl_name (From, To, Body) VALUES ('$From', '$To', '$Body')";
$result=mysql_query($sql);
?>

<Response>
<Sms><?php echo $From ?> has messaged <?php echo $To ?> with the message of <?php echo    $Body ?></Sms>
</Response>
4

2 に答える 2

1
"INSERT INTO $tbl_name (From, To, Body) VALUES ('$From', '$To', '$Body')";

ここに次の問題があります。

  1. テーブル名はtableです。テーブル名を。にすることはできませんtabletableMySQLキーワードです。
  2. FromおよびToはmysqlのキーワードです。

このクエリでキーワードを( `で)エスケープして、機能させます。このような

"INSERT INTO `$tbl_name` (`From`, `To`, `Body`) VALUES ('$From', '$To', '$Body')";
于 2012-12-29T17:07:45.017 に答える
0

の出力をチェックしていません mysql_error()FROMとは両方ともTOMySQLの予約キーワードであり、列名として使用するにはバッククォートで引用する必要があります。

$sql = "INSERT INTO `$tbl_name` (`From`, `To`, `Body`) VALUES ('$From', '$To', '$Body')";
$result = mysql_query($sql);
if (!$result) {
   // Problem!
   echo mysql_error();
}

これを超えると、スクリプトはSQLインジェクションに対して脆弱になります。少なくとも、mysql_real_escape_string()これらの各値を呼び出す必要があります。PDOやMySQLiなどのプリペアドステートメントをサポートするAPIへの切り替えを検討してください。

$From = mysql_real_escape_string($_REQUEST['From']);
$To = mysql_real_escape_string($_REQUEST['To']);
$Body = mysql_real_escape_string($_REQUEST['Body']);
于 2012-12-29T17:07:49.777 に答える