使用php将表单中的数据插入mysql数据库

使用php将表单中的数据插入mysql数据库,php,Php,我用了这个密码 <?php $conn = new PDO("mysql:host=localhost;dbname=CU4726629",'CU4726629','CU4726629'); $sql="INSERT INTO review (username, movie_name, ratings) VALUES ("$_POST['username']","$_POST['moviename']","$_POST['ratings']")"; head

我用了这个密码

   <?php
    $conn = new PDO("mysql:host=localhost;dbname=CU4726629",'CU4726629','CU4726629'); 
    $sql="INSERT INTO review (username, movie_name, ratings) VALUES ("$_POST['username']","$_POST['moviename']","$_POST['ratings']")";

   header('Location: reviews.php');  
  ?>

但它总是给我这个错误

分析错误:语法错误,中出现意外的T_变量 /第5行的home/4726629/public_html/check_login.php

你忘了点:

$sql="INSERT INTO review (username, movie_name, ratings) 
                 VALUES (".$_POST['username'].",".$_POST['moviename'].",".$_POST['ratings'].")";

从未来来看,现在您的变量没有转义,因此代码不安全,SQL语句中的字符串不需要,只有整数或浮点不需要

 $sql="INSERT INTO review (username, movie_name, ratings) VALUES ('".$_POST['username']."','".$_POST['moviename']."','".$_POST['ratings']."')";

以上答案是正确的,您需要对字符串进行加密以形成有效的sql查询。您可以回显$sql变量以检查要执行的内容以及sql查询是否有效。您可能希望查看将在sql查询中使用的转义变量,否则您的应用程序将容易受到sql注入攻击

照顾

您还需要查询您准备的sql语句


查看

以此为例:

 <?php
// insert some data using a prepared statement
$stmt = $dbh->prepare("insert into test (name, value) values (:name, :value)");
// bind php variables to the named placeholders in the query
// they are both strings that will not be more than 64 chars long
$stmt->bindParam(':name', $name, PDO_PARAM_STR, 64);
$stmt->bindParam(':value', $value, PDO_PARAM_STR, 64);
// insert a record
$name = 'Foo';
$value = 'Bar';
$stmt->execute();
// and another
$name = 'Fu';
$value = 'Ba';
$stmt->execute();
// more if you like, but we're done
$stmt = null;
?>
有几个错误:

1) 你得把琴弦绷紧! 像这样:

$sql="INSERT INTO review (username, movie_name, ratings) 
                 VALUES (".$_POST['username'].",".$_POST['moviename'].",".$_POST['ratings'].")";
2) 您根本没有使用PDO: 创建“insert”字符串后,必须查询数据库本身,类似于使用

$conn->query($sql);
注意:这是伪代码

3) 主要问题是这种方法是错误的。 以这种方式构造查询会导致许多安全问题。 如果我把“moviename”改为“drop table review”,会怎么样???它会破坏你的数据库。 因此,我的建议是使用:


您需要使用大括号
{
}将变量括起来,或者将它们连接到字符串。但是,这不是PDO的正确用法,也不是在实际查询db(它只是一个字符串),因为他的SQL查询没有执行,所以不会引发安全问题。但是,如果执行了它,无论使用哪种MySQL api,这个查询字符串都不会工作,因为示例中的列类型是字符串,因此可以学习如何绑定$\u POST vars:)谢谢
$conn->query($sql);
$sql="INSERT INTO review (username, movie_name, ratings) 
                 VALUES (?,?,?)";
$q = $conn->prepare($sql);
$fill_array = array($_POST['username'], $_POST['moviename'], $_POST['ratings']);
$q->execute($fill_array);