将php连接到mysqli数据库

时间:2016-04-24 13:19:45

标签: php mysqli

我正在将数据添加到mysqli数据库中。可能我只是将代码放在错误的位置,但添加到我的表单中的信息似乎都没有通过。如果你可以帮助我,那会很棒。感谢。

PS我删除了部分原始代码,例如错误消息。

<?php

    $servername = "A";
    $username = "B";
    $password = "C";
    $dbname = "D";

if (isset($_POST["submit"])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    //Check connection
    if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);

    $query = "INSERT INTO Form (name, email, message)".
    "VALUES ('" . $name . "', '" . $email . "', '" . $message . "');";

    mysqli_query($query);

    //close connection
    mysqli_close($conn);
}
?>

3 个答案:

答案 0 :(得分:2)

mysqli_query

需要连接参数
mysqli_query($conn, $query);

此外,您需要使用mysqli_real_escape_string()阻止SQL注入:

$name = mysqli_real_escape_string($conn, $_POST['name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$message = mysqli_real_escape_string($conn, $_POST['message']);

答案 1 :(得分:2)

简单,您从未将数据库连接传递给mysqli_query($query);

并确保您的POST数组包含值。

所以,mysqli_query($conn, $query);并检查错误。

请参阅以下链接http://php.net/manual/en/mysqli.error.phphttp://php.net/manual/en/function.error-reporting.php并将其应用于您的代码。

您目前的代码向SQL injection开放。使用prepared statementsPDOprepared statements

还要确保此条件语句启动:

if (isset($_POST["submit"])) {...}

如果您的提交按钮不包含submit名称属性(以及所有其他POST数组),则其中的任何内容都不会执行。

即:name="submit"name="name"name="email"name="message"并且表单确实使用了POST方法。

错误报告可以帮助您。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

N.B。:您还应检查空白字段,如果这是一个实际网站或打算上线。

如果用户没有输入任何内容,则可能会因此而出现错误/失败。

对这些输入使用条件!empty()

即:

if (isset($_POST["submit"])) {

if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message'])){

    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    // Rest of your query here

    }

    else{ echo "One of the fields is empty."; exit; }


}
else{ echo "Submit is not set."; }

<强>脚注:

您不确定如何运行此代码,以及是否已安装并正确配置了Web服务器/ PHP / MySQL。

如果您以file:///file.xxx而不是http://localhost/file.xxx进行访问,则会失败。

  • 它必须是后者。

答案 2 :(得分:0)

而且我认为如果不这样做,你需要对表名和列名使用1 abd 324 1:is a command, abd:is a name, 324:is an id 字符。 (靠近键盘上的1,也用于stackoverflow中的代码简单)。也许您使用了该字符,但stackoverflow不显示字符。