PHP-PDO查询问题

时间:2016-08-10 03:47:06

标签: php mysql pdo

您好我正在使用php开发我的第一个数据库连接。但由于某种原因,数据没有插入表中。我有一个带名字和姓氏的页面。我创建了一个名为用户信息的表。这里是整个代码,除了(错误和结果页面都很好)。

的index.php

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Test</title>
  <link href="style.css" rel="stylesheet" type="text/css">
</head>

<body>
<div id="wrapper">
  <div id="main">
    <div id="inbox">
       <form action="function.php" method="post">
         <span id="first">First Name: </span>
         <input type="text" name="fname" id="textField">
         <span id="second">Last name: </span>
         <input type="text" name="lname" id="textField"><br><br>
         <input type="submit" value="Submit" id="submitBtn">
        </form>
      </div>
    </div>
   </div>
   </body>
   </html>

database.php中

<?php
$dsn = 'mysql:host=localhost;dbname=practice';
$username = 'user';
$password = 'user123';

 try {
    $db = new PDO($dsn, $username, $password);
 } catch (PDOException $e) {
    $error_message = $e->getMessage();
    include('database_error.php');
    exit();
 }
?>

function.php

<?php
 require_once('database.php');

$firstName = filter_input(INPUT_POST, 'fname');
$lastName  = filter_input(INPUT_POST, 'lname');

$firstName_q = $db->quote($firstName);
$lastName_q = $db->quote($lastName);

$query = 'INSERT INTO PRACTICE.USERINFO
        (USERID, FIRSTNAME, LASTNAME)
     VALUES(DEFAULT, $firstName_q, $lastName_q)';

$insert_count = $db->exec($query);

include('result.php');
?>

我不确定我在做错的地方。它似乎成功连接。并显示结果页面(这只是一个说成功的文本)。但桌子是空的。我看到一些类似的帖子,但它们对我来说太长或太复杂了。帮助将受到高度赞赏。提前谢谢!

2 个答案:

答案 0 :(得分:2)

  • 首先,在您的数据库-php代码中用include替换包含。 php中不存在Inclu。
  • 第二,我建议不要在表名中使用点,而是使用下划线。 PRACTICE_USERINFO。就个人而言,我总是喜欢小写的表名。
  • 第三,在测试模式下直接回显您的$error_message var,看看错误可能是什么。
  • 第四,在测试模式下让您的页面显示所有错误。 (google on&#39;让php显示所有错误&#39;)。请确保不要在现实生活模式下执行此操作。
  • 第五,我不是OOP的专家,我可能错过了一些东西......
  • 第六,用双引号,而不是单引号来体现你的sql-query,就像已经提到的评论者一样。当您使用单引号时,以$开头的变量不会被&#39;读取&#39;。

答案 1 :(得分:0)

您的代码中存在多个问题,其中大部分都是@HarryK在回答中提到的,我想特别关注“为什么插入不被触发?”的具体问题 您的查询:

$query = 'INSERT INTO PRACTICE.USERINFO
        (USERID, FIRSTNAME, LASTNAME)
     VALUES(DEFAULT, $firstName_q, $lastName_q);

替换为双引号,如下所示:

$query = "INSERT INTO PRACTICE.USERINFO
        (USERID, FIRSTNAME, LASTNAME)
     VALUES(DEFAULT, $firstName_q, $lastName_q)";

好参考:

When to use single quotes, double quotes, and backticks in MySQL

PHP - Single quotes or double quotes around SQL query?