使用php不会在数据库中输入数据

时间:2016-01-23 16:27:33

标签: php mysql database

我想将数据插入到数据库中。但是当我点击保存按钮时,数据没有进入数据库。我不明白我错在哪里。这是我的PHP代码:

    <?php
$host = "localhost";
$user = "root";
$password ="";
$database = "crud";
$conn = new mysqli($host, $user, $password);
mysql_select_db($database);

if(isset($_POST['btn-save']))
{
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$city_name = $_POST['city_name'];
$sql_query ="INSERT INTO users(first_name,last_name,user_city) VALUES('$first_name','$last_name','$city_name')";
  mysql_query($sql_query);
}
?>

1 个答案:

答案 0 :(得分:1)

您正在混合mysqlimysql方法〜忽略现已弃用的mysql_*函数套件并专注于mysqli - 如果您希望阻止sql,请了解预准备语句注射。

希望以下内容应插入数据。

<?php
    $host = "localhost";
    $user = "root";
    $password = "";
    $database = "crud";

    $conn = new mysqli( $host, $user, $password, $database );

    if( isset( $_POST['btn-save'] ) ){
        $first_name = $_POST['first_name'];
        $last_name = $_POST['last_name'];
        $city_name = $_POST['city_name'];

        $sql ="INSERT INTO `users` (`first_name`,`last_name`,`user_city`) VALUES ( '{$first_name}', '{$last_name}', '{$city_name}' )";
        $res=$conn->query( $sql );
        if( $res ){
            /* all good */  
        }
        $conn->close();
    }
?>

我提到prepared statements - 可以使用以下内容(希望没有问题)代替上面的$conn->query()!基本的想法是你在sql语句中使用占位符然后将变量绑定到那些占位符 - 不管你信不信,这个方法会大大降低sql注入的几率; /

    $sql  = "INSERT INTO `users` (`first_name`,`last_name`,`user_city`) VALUES ( ?, ?, ? )";

    $stmt = $conn->prepare( $sql );
    $stmt->bind_param('sss',$first_name,$last_name,$city_name);
    $res=$stmt->execute();

    if( $res ){
        /* all good ~ display a message or set a var etc */
        $stmt->close();
    }
    $conn->close();