php - 准备好的 SQL 语句 INSERT

标签 php mysql sql

我目前正在使用准备好的 SQL 语句遵循 W3Schools 教程,当我尝试将数据插入数据库时​​,它说 $firstname = "Nathan"和 $lastname = "Kent"是未使用的局部变量?它还没有返回错误,因此连接正常,当我检查数据库时,它没有新条目。

 function setData(){
    global $servername;
    global $username;
    global $password;
    global $dbname;

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

// Check connection
     if ($conn->connect_error) {
         die("Connection failed: " . $conn->connect_error);
     } else{
         echo "Connection Successful" . "<br>";
   }
    $stmt = $conn->prepare("INSERT INTO test(firstname, surname) VALUES       (?,?)");
    $stmt->bind_param("ss", $firstname, $surname);

    $firstname = "James";
    $lastname = "Williams";
    $stmt->execute();

    echo "New Records Created";

    $stmt->close();
    $conn->close();

}

最佳答案

使用 MYSQLI,您实际上需要查找错误,而不是假设它们会对您大喊大叫。

function setData(){
    global $servername;
    global $username;
    global $password;
    global $dbname;

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

    // Check connection
    if ($conn->connect_error) {
         die("Connection failed: " . $conn->connect_error);
    } else{
         echo "Connection Successful" . "<br>";
    }
    $stmt = $conn->prepare("INSERT INTO test(firstname, surname) VALUES (?,?)");

    // add error check
    if ( $stmt === false ) {
        echo $conn->error;
        exit;
    }

    // Its not necessary to load the variables before the `bind_param`
    // but as you dont actually have these variables yet you do
    $firstname = "James";
    $lastname = "Williams";

    $stmt->bind_param("ss", $firstname, $surname);

    $status = $stmt->execute();

    // add error check
    if ( $status === false ) {
        echo $conn->error;
        exit;
    }


    echo "New Records Created";

    $stmt->close();
    $conn->close();

}

您也可以通过在主线代码中连接到数据库并将连接参数以及数据参数传递给函数来稍微清理一下

function setData($conn, $firstname, $lastname){

    $stmt = $conn->prepare("INSERT INTO test(firstname, surname) VALUES (?,?)");

    // add error check
    if ( $stmt === false ) {
        echo $conn->error;
        exit;
    }

    $stmt->bind_param("ss", $firstname, $surname);

    $status = $stmt->execute();

    // add error check
    if ( $status === false ) {
        echo $conn->error;
        exit;
    }

    return "New Records Created";

    $stmt->close();
    $conn->close();

}


$servername = '127.0.0.1';
$username   = 'root';
$password   = 'veryStRongPassPhrASe';
$dbname     = 'mydatabase';

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

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


$msg = setData($conn, 'Fred', 'Bloggs');
echo $msg;

关于php - 准备好的 SQL 语句 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38983523/

相关文章:

php - 在 while 循环中使用 foreach 循环并回显值

sql - 通过运行批处理文件来执行 SQL 文件

sql - 如何删除 SQL 中的重复行(Clickhouse)?

php - 如何显示MySQL表的平均值

php - 如何使用 php 将 opencart 应用程序连接到 ms sql server 数据库?

php - ASP.NET 和 PHP 托管的成本有什么区别?

php - 加载 mysql 数据后继续 jQuery

php - 在我的 CMS php 中将类名组合在一起

mysql - 在不同条件下对同一列计数 * 两次

mysql - 外部连接最常见植物物种的子查询