【发布时间】:2014-05-19 12:59:33
【问题描述】:
我遇到了一个必须将其数据发布到数据库的表单的问题。通常我这种方法有效。但这次我得到一个错误。我尝试对可能出现的问题进行故障排除,但没有发现错误。
<?php
session_start();
if($_SESSION['userRole'] == 'leerling')
{
if($_POST)
{
include "../dbCon.php";
$naam = $_SESSION['name'];
$dbtabel = "evaluatie";
$vraag1 = $_POST['vraag1'];
$vraag2 = $_POST['vraag2'];
$vraag3 = $_POST['vraag3'];
$vraag4 = $_POST['vraag4'];
$vraag5 = $_POST['vraag5'];
try
{
$objDB = new PDO('mysql:host=' . $dbhost .'; dbname=' . $dbname , $dbuser , $dbpassword , array( PDO::ATTR_PERSISTENT => true));
$query = $objDB->query('SELECT * FROM '. $dbtable );
}
catch (PDOException $e)
{
echo "1: Er is een fout opgetreden tijdens het verbinden met de database.<br />Namelijk: ".$e->getMessage();
}
try
{
$objDB = new PDO('mysql:host=' . $dbhost .'; dbname=' . $dbname , $dbuser , $dbpassword , array( PDO::ATTR_PERSISTENT => true));
$objDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$strSql = "INSERT INTO " . $dbtable . " (naam, vraag1, vraag2, vraag3, vraag4, vraag5)
VALUES ( '" . $naam . "' , '" . $vraag1 . "' , '" . $vraag2 . "' , '" . $vraag3 . "' , '" . $vraag4 . "' , '" . $vraag5 . "')";
$objStmt = $objDB->prepare($strSql);
$objStmt->execute();
}
catch (PDOException $e)
{
echo "2: Er is een fout opgetreden tijdens het verbinden met de database.<br />Namelijk: ".$e->getMessage();
}
}
}
?>
当我在我的网站上查看页面时出现错误
2: Er is een fout opgetreden tijdens het verbinden met de database. Namelijk: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(naam, vraag1, vraag2, vraag3, vraag4, vraag5) VALUES ( 'seppe' , 'Ik be' at line 1
有人知道我检查了 10 次代码有什么问题吗。
【问题讨论】:
-
你能用插值的变量显示整个查询吗?
-
您不需要在 SQL 查询中包含类似的变量。你可以简单地做
$strSql = "INSERT INTO '$dbname' etc"; -
根据错误消息,您似乎没有在查询中正确转义
' -
只是一个观察,但是如果您不打算使用用户查询参数,那么使用 PDO 有什么意义呢? php.net/manual/en/pdo.prepare.php
标签: php mysql sql database pdo