【问题标题】:error with a form action post when inserting to a database插入数据库时​​表单操作帖子出错
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 是否所有字段都具有正确的数据类型和长度?
  • id = int(11), naam = varchar(50), vraag1 = text, vraag2 = text, vraag3 = text, vraag4 = text, vraag5 = text。
猜你喜欢
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 2012-10-26
  • 2016-05-23
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
相关资源
最近更新 更多