Php 插入数据库时表单操作post出错
我有一个表单的问题,它必须将数据发布到数据库。通常我认为这种方法有效。但这次我犯了一个错误。我试图排除可能出现的错误,但没有找到错误Php 插入数据库时表单操作post出错,php,mysql,sql,database,pdo,Php,Mysql,Sql,Database,Pdo,我有一个表单的问题,它必须将数据发布到数据库。通常我认为这种方法有效。但这次我犯了一个错误。我试图排除可能出现的错误,但没有找到错误 <?php session_start(); if($_SESSION['userRole'] == 'leerling') { if($_POST) { include "../dbCon.php"; $naam = $_SESSION['name']; $dbtabel = "evalua
<?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();
}
}
}
?>
有人知道我检查了10次代码出了什么问题吗。如果您使用query()
,则如下所示:
$strSql = 'INSERT INTO ' . $dbtable . ' (naam, vraag1, vraag2, vraag3, vraag4, vraag5)
VALUES (' . $naam . ',' . $vraag1 . ',' . $vraag2 . ',' . $vraag3 . ',' . $vraag4 . ',' . $vraag5 . ')';
$objStmt = $objDB->query($strSql);
...
如果您喜欢使用准备好的语句,那么您可以使用以下方法:
$strSql = 'INSERT INTO ' . $dbtable . ' (naam, vraag1, vraag2, vraag3, vraag4, vraag5)
VALUES (:naam, :vraag1, :vraag2, :vraag3, :vraag4, :vraag5)';
$objStmt = $objDB->prepare($strSql);
$objStmt->execute(
array(
':naam' => $naam,
':vraag1' => $vraag1,
':vraag2' => $vraag2,
':vraag3' => $vraag3,
':vraag4' => $vraag4,
':vraag5' => $vraag5
)
);
您能用插入的变量显示整个查询吗?您不需要在SQL查询中包含这样的变量。您只需执行
$strSql=“INSERT-INTO'$dbname'等”
根据错误消息,看起来您没有在查询中正确地转义”
,这只是一个观察,但是如果您不打算使用用户查询参数,那么使用PDO有什么意义呢?是否所有字段都具有正确的数据类型和长度?id=int(11),naam=varchar(50),vraag1=text,vraag2=text,vraag3=text,vraag4=text,vraag5=text。
$strSql = 'INSERT INTO ' . $dbtable . ' (naam, vraag1, vraag2, vraag3, vraag4, vraag5)
VALUES (:naam, :vraag1, :vraag2, :vraag3, :vraag4, :vraag5)';
$objStmt = $objDB->prepare($strSql);
$objStmt->execute(
array(
':naam' => $naam,
':vraag1' => $vraag1,
':vraag2' => $vraag2,
':vraag3' => $vraag3,
':vraag4' => $vraag4,
':vraag5' => $vraag5
)
);