使用php提交时出现sql错误

时间:2016-11-22 01:28:01

标签: php jquery mysql ajax

我向数据库表提交条目的php文件不起作用,我无法弄清楚原因。它接受Ajax提交,我知道问题不在于数据,或者Ajax请求因为它处理成功。唯一的问题是没有数据提交到我的数据库。我之前有这个工作,我改为代码连接之前它是一个变量的地址字符串。任何建议都会很棒!

这是php文件 更新:::这是更新的PHP文件

 <?php
require("dbinfo.php");

// Create connection
$conn = new mysqli('localhost', $username, $password, $database);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$name = $_POST['user_name'];
$street = $_POST['user_street'];
$city = $_POST['user_city'];
$state = $_POST['user_state'];
$country = $_POST['user_country'];
$zip = $_POST['user_zip'];

$address = $street.', '.$city.', '.$state.', '.$country.', '.$zip;
$shortAdd = $city.', '.$state.', '.$country;

$type = $_POST['user_color'];
$desc = $_POST['user_message'];
$request_url = "http://maps.googleapis.com/maps/api/geocode/xml?address=".$address."&sensor=true";
$xml = simplexml_load_file($request_url) or die("url not loading");
$status = $xml->status;
if ($status=="OK") {
      $lat = $xml->result->geometry->location->lat;
      $lon = $xml->result->geometry->location->lng;
}
$sql = "INSERT INTO `markers` (`name`, `address`, `lat`, `lng`, `type`, `desc`) 
    VALUES (?, ?, ?, ?, ?, ?);";

$stmt = $conn->prepare($sql);
$stmt->bind_param('ssssss', $name, $shortAdd, $lat, $lon, $type, $desc);
$stmt->execute();
$conn->close();
?>

2 个答案:

答案 0 :(得分:1)

当@MySelfBoy写道:

  

分配后,您必须执行SQL语句

他意味着你必须执行你的查询

$sql = "INSERT INTO `markers` (`name`, `address`, `lat`, `lng`, `type`, `desc`) 
    VALUES ('$name', '$shortAdd', '$lat', '$lon', '$type', '$desc');"; 

按照以下说明操作:

$conn->query($sql);

注意:我仍然无法发表评论,所以我在这里发帖。

答案 1 :(得分:1)

虽然docliving的答案是正确的,但 采取额外步骤并使用预备语句。没有它,您的代码很容易受到SQL注入攻击。将它转换为使用预准备语句只需要很小的改动。以下是如何使用mysqli:

$sql = "INSERT INTO `markers` (`name`, `address`, `lat`, `lng`, `type`, `desc`) 
    VALUES (?, ?, ?, ?, ?, ?);";

$stmt = $conn->prepare($sql);
$stmt->bind_param('ssssss', $name, $shortAdd, $lat, $lon, $type, $desc);
$stmt->execute();