我正在尝试将来自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>
答案 0 :(得分:1)
"INSERT INTO $tbl_name (From, To, Body) VALUES ('$From', '$To', '$Body')";
您有以下问题。
table
。表名不能是table
。 table
是MySQL关键字。From
和To
是关键字。在此查询中转义关键字(带有`)以使其正常工作。喜欢这个
"INSERT INTO `$tbl_name` (`From`, `To`, `Body`) VALUES ('$From', '$To', '$Body')";
答案 1 :(得分:0)
您没有检查mysql_error()
的输出。 FROM
和TO
都是MySQL reserved keywords,必须在反引号中引用才能用作列名。
$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']);