2009-07-24 24 views
9

pdoを使用してsqlite3データベースに挿入するのに問題があります。 PDOの無知を言い訳しなければならないでしょう。それはPythonのデータベースインターフェイスから外国人が来ているようです。PDO(sqllite3)にどのように挿入すればよいですか?

だから私の問題です。私は簡単な挿入があります:

$dbh = new PDO('sqlite:vets.db'); 
    $count = $dbh->exec("INSERT INTO vets(name,email,clinic,streetname,citystatezip,link,phone,fax,animal,region,visible) VALUES ($name,$email,$clinic,$streetname,$citystatezip,$link,$phone,$fax,$animal,$region,$visible)"); 
    $dbh = null; 

私は単に自分のデータベース上でSQLコマンドを実行し、それを使ってやりたいのです。このスクリプトを実行するとエラーは発生しませんが、データベースを更新することはありません。私は777にしたとしても、データベース自体についてあらゆる種類の権限を試しましたが、違いはありません。

誰かが私を助けることができますか?

+0

同じようにsidenote(あなたの問題に関係しないかもしれない)、あなたはあなたが質問に注入しているデータをエスケープすることを考えましたか? (PDO :: quoteを参照)。 (PDO :: prepare + PDO :: executeを参照してください)。 SQLエラーがないかチェックしてみましたか? (http://php.net/manual/fr/pdo.errorinfo.phpを参照) –

+0

PDO sqliteアダプタで成功した他のクエリはありますか? – sixthgear

+0

また、各値を囲むSQL文には引用符がないようです。 (引用符は各変数に含まれていない限り) – sixthgear

答えて

21

PDOの大きな利点の1つは、準備文を作成できることです。ここでは私のPHPプロジェクトからいくつかのコードです:あなたが見ることができるように、私は値を挿入する場所

$qry = $db->prepare(
    'INSERT INTO twocents (path, name, message) VALUES (?, ?, ?)'); 
$qry->execute(array($path, $name, $message)); 

が、私は?を使用するが、その後、私の代わりに置かれるべき値の配列でクエリを実行します疑問符。あなたがこれを行う場合は

、あなたのクエリがはるかに安全、かつ動作する可能性が高くなります(欠落値はあなたが行うようにクエリで直接変数を挿入する作業からあなたのクエリを止めるからである。)

+0

ありがとうございました。私はこれらのPreparedステートメントを実際に理解していませんでした。ありがとうございました! – kodai

+0

私は、パラメータが配列()内にラップされることをなぜ要求するのかは決して思い出せません(1つのパラメータであっても!)。なぜ単にパラメータのリストを受け入れるのではないのですか? –

+1

良い質問... PDOの基礎となるライブラリのようにサポート/動作する可能性が最も高いです。 PHPはさまざまな引数をサポートしているので、間違いなく可能です。あなたは 'parent :: execute(func_get_args()) 'を呼び出す' execute'を使って独自のサブクラスを作ることができます – Blixt

2

SQLクエリでエラーが発生する可能性があります。あなたはそれを印刷して、SQLite Database BrowserのようないくつかのSQLite GUIインターフェースでそれを実行しようとすることができます。

// you can skip PDO part for now, because we know it doesn't work 
// $dbh = new PDO('sqlite:vets.db'); 
$query = "INSERT INTO vets(name,email,clinic,streetname,citystatezip,link,phone,fax,animal,region,visible) VALUES ($name,$email,$clinic,$streetname,$citystatezip,$link,$phone,$fax,$animal,$region,$visible)"; 
echo $query; 
// $count = $dbh->exec($query); 
// $dbh = null; 

あなたの値を引用符で囲んでいないことがわかります。おそらくそれが問題の原因です。テーブルのフィールド名にもいくつかのタイプミスがあるかもしれません。実際にクエリが表示されると、すべてが表示されます。

+1

あなたは正しいです、私は自分のデータを引用するのを忘れていました。ありがとうございました。 – kodai

関連する問題