我有这个mysql
查询:
$sql = "INSERT INTO lijsten(naam, niveau, nederlands, duits, frans, grieks,
engels, latijn, spaans, wiskunde, natuurkunde, scheikunde, geschiedenis,
economie, aardrijkskunde, ANW, godsdienst)
VALUES($_POST["naam"],$_POST["niveau"],$_POST["nederlands"],$_POST["duits"],$_POST["frans"],$_POST["grieks"],$_POST["engels"],$_POST["latijn"],$_POST["spaans"],$_POST["wiskunde"],$_POST["natuurkunde"],$_POST["scheikunde"],$_POST["geschiedenis"],$_POST["economie"],$_POST["aardrijkskunde"],$_POST["ANW"],$_POST["godsdienst"])";
它被发送到具有以下功能的数据库:
function connectDB($sql) {
$DBcon = mysql_connect(host, user, pass) or die(mysql_error());
mysql_select_db(database);
$result = mysql_query($query) or die(mysql_error());
mysql_close($DBcon);
return $result;
但当我尝试运行它时,它会给我一个php解析错误:
PHP Parse error: syntax error, unexpected 'naam' (T_STRING) in /media/usbdisk/website/www/boeken/naardb.php on line 11
有人能告诉我我犯了什么错误吗?我已经尝试了很多方法来放置查询,但都不起作用。
- 您永远不应该构建这样的查询
- 这不是你逃避价值观的方式
mysql_
已弃用,您应该使用已准备好的语句
PDO中的示例:
$sql = "INSERT INTO lijsten(naam, niveau, nederlands, duits, frans, grieks,
engels, latijn, spaans, wiskunde, natuurkunde, scheikunde, geschiedenis,
economie, aardrijkskunde, ANW, godsdienst)
VALUES(:naam,:niveau .......)";
if($stmt = $pdo->prepare($sql)){
$stmt->bindValue(:naam, $_POST["naam"]);
.....
$stmt->execute();
}
有几个错误,但我将从这个问题开始。
unexpected 'naam' (T_STRING)...
是因为PHP不希望那里有字符串。您正在转义部分查询,但实际上只需要连接$_POST变量。
我建议将posts变量设置为它们自己的变量,以简化您的查询,并将查询格式化为如下答案:在MySQL插入语句中使用php变量
IE:$naam = $_POST["naam"];
等…
最大的问题是您使用的是不推荐使用的方法,您应该使用PDO(Prepared)查询
PHP弃用的方法。
你绝对应该考虑使用PDO并准备你的陈述。
PDO的两个快速参考:
- http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059
- http://php.net/manual/en/book.pdo.php
祝你好运!
尝试像这样连接查询中的变量:
"INSERT INTO lijsten(naam, niveau, nederlands, duits, frans, grieks,
engels, latijn, spaans, wiskunde, natuurkunde, scheikunde, geschiedenis,
economie, aardrijkskunde, ANW, godsdienst)
VALUES("
.mysql_escape_string($_POST['naam']).
")";
以及阅读有关sql注入的内容。
@mada的答案是如何使用PDO创建SQL调用的正确示例。