2

我正在尝试将来自 Twilio 的短信中的内容插入 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. 表名不能tabletable是一个 MySQL 关键字
  2. FromTo是mysql中的关键字

转义此查询中的关键字(带 `)以使其工作。像这样

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

您没有检查 mysql_error(). FROM和都是MySQL 保留关键字TO,必须在反引号中引用才能用作列名。

$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()这些值中的每一个。考虑切换到支持预处理语句的 API,例如 PDO 或 MySQLi。

$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 回答