【问题标题】:Couldn't enter the data to mysql using php无法使用 php 将数据输入到 mysql
【发布时间】:2018-03-09 12:07:50
【问题描述】:

它无法将数据存储到 mysql。该怎么办?所有变量和文件名都正确。

     <?php
require 'connection.php';
$conn    = Connect();
$id    =$conn->real_escape_string ($_POST['id']);
$name    = $conn->real_escape_string ($_POST['name']);
$phone    = $conn->real_escape_string ($_POST['phone']);
$address    = $conn->real_escape_string ($_POST['address']);
$city    = $conn->real_escape_string ($_POST['city']);
$zip   = $conn->real_escape_string ($_POST['zip']);
$state    = $conn->real_escape_string ($_POST['state']);
$item    = $conn->real_escape_string ($_POST['item']);

$status    = $conn->real_escape_string ($_POST['status']);
$enquiry_date    = $conn->real_escape_string ($_POST['enquiry_date']);
$enquiry_user = $conn->real_escape_string ($_POST['enquiry_user']);
$query   = "INSERT into enquiry
           (id, name, phone, address, city, zip, state, item, status, enquiry_date, enquiry_user) 
           VALUES('" . $id . "','" . $name . "','" . $phone . "','" . $address . "','" . $city . "','" . $zip . "','" . $state . "','" . $item . "','" . $status . "','" . $enquiry_date . "')";
$success = $conn->query($query);



if (!$success) {
    die("Couldn't enter data: ".$conn->error);
}

echo "Thank You For Contacting Us <br>";

$conn->close();
?>

【问题讨论】:

  • 使用准备好的语句可以解决转义字符串和引号的工作
  • $enquiry_user 作为最后一个参数丢失
  • 您已经在使用支持 prepared statements 的 API 和有界变量输入,您应该使用带有占位符(prepared statements)的参数化查询来保护您的数据库免受SQL-injection !开始使用 mysqli::prepare()mysqli_stmt::bind_param()
  • 就像已经问过的那样,$conn-&gt;error 会提供什么吗?您是否启用了 PHP 错误报告?
  • 是的,我们知道 $conn 的来源。 echo $conn-&gt;error 为您提供有关您遇到的错误的信息(@Qirel 和我已经告诉过您)

标签: php mysql mysqli phpmyadmin


【解决方案1】:

正如@Jeff 所说:

$query   = "INSERT into enquiry
       (id, name, phone, address, city, 
        zip, state, item, status, enquiry_date, enquiry_user) 
       VALUES('" . $id . "','" . $name . "','" . $phone . "','" . $address . "','" 
        . $city . "','" . $zip . "','" . $state . "','" . $item . "','" 
         $status . "','" . $enquiry_date . "','" . $enquiry_user . "')";

你错过了. "','" . $enquiry_user

【讨论】:

  • 半修复它。这里真正的问题是不使用占位符值。
  • @tadman 我同意。但这需要一个教训和例子,我遵循拉里沃尔的哲学
  • Larry Wall 不主张让您的代码容易受到 SQL 注入攻击,因为这是可预防的错误。 DBM supports placeholder values.
  • @tadman 哈哈哈。不,但他确实提倡要偷懒,不要让别人工作。我100%同意你的观点,他需要学习。
  • @JacquesAmar [stackoverflow.com/questions/52343928/… 你能帮我写这段代码吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多