使用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);