2011-10-26 11 views
0

私は別のページから渡された変数を取得し、PDOクエリで使用しようとしています。変数はレコードが追加された日付であり、私はすべての新しいレコードを返そうとしています。 PDOで$ _POSTを使用していますか?PDOを使用したクエリで渡された変数を使用する

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

$date_added = $_POST['date_added']; 

$sth = $dbh->prepare("SELECT * FROM games WHERE date_added > $date_added"); 
$sth->execute(); 

/* Fetch all of the remaining rows in the result set */ 
print("Fetch all of the remaining rows in the result set:\n"); 
$result = $sth->fetchAll(); 
print_r($result); 


?> 
+1

両方のドキュメントを読んでください!そうでない場合:あなたは何を見ているのですか?ここでの問題の1つは、クエリでユーザデータを直接取得していることです。プリペアドステートメントや$ dbh-> quote()を使用しています。 – johannes

+0

エラー:致命的なエラー:非オブジェクトのprepare()関数を呼び出してください。 –

+0

これは公開されたものではありません。 –

答えて

2

あなたが実際に$dbhに新しいPDOオブジェクトを作成することにより、データベースへの接続を確立する必要があります。以下のコードでは、データベースユーザーとパスワードを$dbusername, $dbpassword、データベース名を$nameofdbと仮定しています。

$date_addedは、パラメータ:dateaddedprepare()コールに置き換えられ、その後、​​コールに配列を介して渡されます。

それが動作しますPDO::__construct()PDO::execute()

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

// Connect to MySQL via PDO 
try { 
    $dbh = new PDO("mysql:dbname=$nameofdb;host=localhost", $dbusername, $dbpassword); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

$date_added = $_POST['date_added']; 

// Replace `$date_added` with a parameter `:dateadded` 
$sth = $dbh->prepare("SELECT * FROM games WHERE date_added > :dateadded"); 
// bind $date_added and pass it into the execute() call inside an array 
$sth->execute(array('dateadded'=>$date_added)); 

/* Fetch all of the remaining rows in the result set */ 
print("Fetch all of the remaining rows in the result set:\n"); 
$result = $sth->fetchAll(); 
print_r($result); 

?> 
+0

ありがとうマイケル!それは完全に機能します。 PDOリンクにも感謝します。 –

+0

印刷する代わりに結果をjsonにしたければ、コードは '$ json = json_encode($ result);' の代わりに 'print_r($ result);' 最後の行は? –

+1

@DonS 'echo json_encode($ result);' –

関連する問題