简体   繁体   English

准备好的SQL语句INSERT

[英]Prepared SQL Statements INSERT

I am currently following W3Schools tutorial with Prepared SQL statements, When I try to insert data into the database it's saying $firstname = "Nathan" and $lastname = "Kent" is an unused local variable? 我目前正在使用W3Schools教程使用预准备的SQL语句,当我尝试将数据插入数据库时​​,它说$ firstname =“ Nathan”和$ lastname =“ Kent”是未使用的局部变量吗? Also it returns no error so it's connecting fine and when I check the database it has no new entries. 而且它不返回错误,因此连接正常,当我检查数据库时,它没有新条目。

 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();

}

With MYSQLI you actually need to look for errors rather than assuming they will shout at you. 使用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();

}

You could clean this up a bit as well by connecting to the database in the mainline code and passing the connection param to the function as well as the data parameters 您也可以通过在主线代码中连接到数据库并将连接参数传递给函数以及数据参数来清理一点

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;

You do not define a value for $surname : 您没有为$surname定义值:

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

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

Change $lastname to $surname $lastname更改$lastname $surname

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM