我想将数据插入到数据库中。但是当我点击保存按钮时,数据没有进入数据库。我不明白我错在哪里。这是我的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);
}
?>
答案 0 :(得分:1)
您正在混合mysqli
和mysql
方法〜忽略现已弃用的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();