2016-08-10 15 views
0

こんにちは、私はPHPとの最初のDB接続を開発していました。しかし何らかの理由でデータがテーブルに挿入されていません。私は名字と姓をとったページを持っています。私はuser infoというテーブルを作成しました。ここでは、すべてのコードは例外です(エラーと結果のページはすべて問題ありません)。PHP-PDOクエリの問題

の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'); 
?> 

私はミスをやっているところを確認していません。それは正常に接続するようです。結果ページを表示します(これは単に成功を示すテキストです)。しかし、テーブルは空です。私はこれに似たポストを見ましたが、現時点では長すぎたり複雑です。助けが高く評価されるだろう。前もって感謝します!

+0

'incluse'?あなたは 'include'を意味しましたか?また、同じIDを持つ複数のHTML要素を持つべきではありません – Phil

+0

[補間に間違った引用符を使用しています](http://php.net/manual/en/language.types.string.php#language.types .string.syntax)を '$ query'変数に追加してください。まともなエラー報告を有効にしてPHPを実行していないことは明らかです。 'php.ini'に' display_errors = On'と 'error_reporting = E_ALL'があることを確認してください。実際には、[バインドされたパラメータ付きの準備文](http://php.net/manual/en/pdo.prepared-statements)を使用する必要があります。php) – Phil

答えて

2
  • 最初に、データベースのPHPコードには、includeを入れ替えてください。 incluseはPHPには存在しません。
  • 2番目に、テーブル名にドットを使用しないことをお勧めします。代わりにアンダースコアを使用してください。 PRACTICE_USERINFO。個人的には、テーブル名には常に小文字を使用します。
  • 3番目に、テストモードで、$error_message varを直接エコーして、エラーの原因を調べます。
  • 4番目に、テストモードでは、ページにすべてのエラーが表示されます。 (Googleは 'phpにすべてのエラーを表示させる')。実生活モードではこれをしないでください。
  • 私はOOPの専門家ではないので、私は何かが見逃している可能性があります...
  • 第六は、あなたのsql-queryを一重引用符ではなく二重引用符で囲みます。一重引用符を使用すると、$で始まる変数は '読み込み'されません。 、それらのほとんどが答えに@HarryKで言及されている
+1

6)クエリに変数を挿入せず、プリペアドステートメントとプレースホルダを使用してください – DarkBee

+0

ありがとう、私は二重引用符を使用して変数を読み取るべきだと思います。 ドットは、特定のデータベースを参照するために使用されます。私のテーブル名は、練習データベースの中にあるuserinfoだけです。 ありがとうございました! – Thomson

+0

ありがとうございました。それはただの練習だった。そしてあなたは正しいです。私は直接変数に変数を注入するべきではありません。 – Thomson

0

あなたのコード内のいくつかの問題がありますが、私は特に、特定の問題に焦点を当てたいと思い あなたのクエリ「トリガー得ていないインサートなぜ?」:

$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?

+0

ありがとうございました。以前は二重引用符で動作していませんでした。しかし今、私は再び変わり、働いているようです。再度、感謝します! – Thomson

+0

あなたもあなたを助けた答えを選択することができます:) – tharif