php - SQL 调用 - 这是正确的吗?

标签 php html mysql database

我最近搬到了另一台主机,并且遇到了问题。当我在网站表单中输入数据时,数据库不会更新。然而,当我的托管服务的运营商在他们这边做这件事时,该表格似乎对他们有用。为什么会这样?

这是 PHP 中的数据库调用

<?php

error_reporting(E_ALL); ini_set('display_errors', 1);

$name = $_POST['name1'];
$surname = $_POST['surname1'];
$email = $_POST['email1'];
$email = filter_var($email, FILTER_SANITIZE_EMAIL); // Sanitizing E-mail.
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {

    define('DB_NAME', 'name');
    define('DB_USER', 'user');
    define('DB_PASSWORD', 'password');
    define('DB_HOST','localhost');

    $conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

    $name = mysqli_real_escape_string($conn, $name);
    $surname = mysqli_real_escape_string($conn,$surname);
    $email = mysqli_real_escape_string($conn,strtolower($email));

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

    $sql = "INSERT INTO interested (Name, Surname, Email) VALUES ('$name', '$surname', '$email')";

    if ($conn->query($sql) === TRUE) {
        echo "Thank you!";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

} else {
    echo "<span>* invalid email *" + $email +"</span>";
}
?>

最佳答案

我忘了提及,您还必须激活 mysql 级别的错误报告。例如。设置$mysqliDriver->report_mode,如下所示。

因此,在更改数据库凭据后,按原样测试此代码。如果有效,则问题出在您的代码中。如果没有,那么它就在其他地方。

<?php
// Db configs.
define('HOST', 'localhost');
define('PORT', 3306);
define('DATABASE', 'tests');
define('USERNAME', 'root');
define('PASSWORD', 'root');

/*
 * Enable internal report functions. This enables the exception handling,
 * e.g. mysqli will not throw PHP warnings anymore, but mysqli exceptions
 * (mysqli_sql_exception).
 *
 * MYSQLI_REPORT_ERROR: Report errors from mysqli function calls.
 * MYSQLI_REPORT_STRICT: Throw a mysqli_sql_exception for errors instead of warnings.
 *
 * @link http://php.net/manual/en/class.mysqli-driver.php
 * @link http://php.net/manual/en/mysqli-driver.report-mode.php
 * @link http://php.net/manual/en/mysqli.constants.php
 */
$mysqliDriver = new mysqli_driver();
$mysqliDriver->report_mode = (MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

// Create a new db connection.
$connection = new mysqli(HOST, USERNAME, PASSWORD, DATABASE, PORT);

// Signalize if a new record could be inserted, or not.
$recordInserted = FALSE;

// Operations upon form submission.
if (isset($_POST['submit'])) {
    // Read the posted values.
    $name = $_POST['name1'] ?? '';
    $surname = $_POST['surname1'] ?? '';
    $email = $_POST['email1'] ?? '';

    // Validate the name.
    if (empty($name)) {
        $errors[] = 'Please provide the name.';
    } /* Other validations here using elseif statements */

    // Validate the surname.
    if (empty($surname)) {
        $errors[] = 'Please provide the surname.';
    } /* Other validations here using elseif statements */

    // Validate the email.
    if (empty($email)) {
        $errors[] = 'Please provide an email address.';
    } elseif (
            !filter_var($email, FILTER_SANITIZE_EMAIL) ||
            !filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = 'The email address is not in a valid format.';
    } /* Other validations here using elseif statements */

    // Insert a new record - if no errors yet.
    if (!isset($errors)) {
        $sql = 'INSERT INTO interested (
                    Name,
                    Surname,
                    Email
                ) VALUES (
                    ?, ?, ?
                )';

        $statement = $connection->prepare($sql);
        $statement->bind_param('sss', $name, $surname, $email);
        $statement->execute();

        // Signalize that the new record was successfully inserted.
        $recordInserted = TRUE;
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes" />
        <meta charset="UTF-8" />
        <!-- The above 3 meta tags must come first in the head -->

        <title>Demo - Insert</title>
    </head>
    <body>

        <div class="messages">
            <?php
            if (isset($errors)) {
                echo implode('<br/>', $errors);
            } elseif ($recordInserted) {
                echo 'A new record was successfully inserted.';
            }
            ?>
        </div>

        <br/>

        <form action="" method="post">
            <label for="name1">Name</label>
            <input type="text" id="name1" name="name1" placeholder="Name" required>
            <br/>
            <label for="surname1">Surname</label>
            <input type="text" id="surname1" name="surname1" placeholder="Surname" required>
            <br/>
            <label for="email1">Email</label>
            <input type="email" id="email1" name="email1" placeholder="Email" required>

            <button type="submit" id="submit" name="submit" value="submit">
                Submit
            </button>
        </form>

    </body>
</html>

关于php - SQL 调用 - 这是正确的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51050369/

相关文章:

python - 如何使用 Django 2.* mysqlclient 在 MySQL 数据库中设置排序规则?

mysql - 如何在命令行上指定连接参数以批处理模式运行 mysql?

php - 如何在 do-while 循环中回显所选项目?

php - 我的 ubuntu 机器上缺少 simplexml,但无法下载

html - 如何强制 div 元素将其内容保存在容器中

php - 从网址中删除 .html

javascript - 单击按钮时替换图像

html - 自己的菜单栏 - 一行中只有一个

PHP/在查询中插入 foreach

javascript - ajax 加载应在选中时保持我的复选框的状态