2016-07-07 17 views
1

PDOバインディングパラメータに問題があります。スリムフレームワークPDO PGSQL、バインディングパラメータなし

設定は次のとおりです。

私は私にアクセスするためにPDOを使用することを選択したUbuntuのデスクトップ16.04 はNetbeans 8.1(PHPとHTML版のみ) PHPのCLI 7.0.4(内部Webサーバを実行している) PostgresのSQL 9.5 スリムフレームワーク3

データベース。これは私の将来のプロジェクトのためのシステムを学ぶことです。

私はテーブルからすべてのレコードをつかむことができます、私は引数をスクリーンにエコーするために発行されます。

ただし、GETメソッドを使用して特定のエントリを特定すると、次のエラーが表示されます。

{"error":{"text":SQLSTATE[08P01]: <>: 7 ERROR: bind message supplies 0 parameters, but prepared statement "pdo_stmt_00000001" requires 1}} 

以下は私のコードです。

をdb.php

<?php 
function getDB() { 
    $dbtype="pgsql"; 
    $dbhost="localhost"; 
    $dbuser="postgres"; 
    $dbpass="SomeSecurePassword"; 
    $dbname="bms"; 
    $dbConnection = new PDO("$dbtype:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
    $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    return $dbConnection; 
} 
?> 

のindex.php

<?php 

use \Psr\Http\Message\ServerRequestInterface as Request; 
use \Psr\Http\Message\ResponseInterface as Response; 

require 'vendor/autoload.php'; 
require 'db.php'; 

$app = new \Slim\App; 

$app->get('/','getRoot'); 
$app->get('/contacts', 'getContacts'); 
$app->get('/contacts/{contact_id}', 'getContact'); 

$app->run(); 

function getRoot() { 
echo 'This is the Root URI'; 
} 

function getContacts() { 
$sql = "SELECT last_name,first_name FROM contacts ORDER BY last_name DESC"; 
try { 
    $db = getDB(); 
    $stmt = $db->query($sql); 
    $contacts = $stmt->fetchAll(PDO::FETCH_OBJ); 
    $db = null; 
    echo '{"Contacts": ' . json_encode($contacts) . '}'; 
} catch(PDOException $e) { 
    echo '{"error":{"text":'. $e->getMessage() .'}}'; 
} 
} 

function getContact(Request $request, Response $response, $args) { 
$contact_id = (int)$args['contact_id']; 
$sql = "SELECT * FROM contacts WHERE contact_id = :contact_id"; 
try { 
    $db = getDB(); 
    $stmt = $db->query($sql); 
    $stmt->bindParam(':contact_id', $contact_id, PDO::PARAM_INT); 
    $stmt->execute(); 
    $stmt->debugDumpParams(); 
    $db = null; 
    echo '{"Contact": ' . json_encode($contact) . '}'; 
} catch(PDOException $e) { 
    echo '{"error":{"text":'. $e->getMessage() .'}}'; 
} 
} 

私は私が間違って行くことができどこへと迷ってしまいました。どんな指導も高く評価されます。

ありがとうございました。

答えて

0

準備文を使用する必要があります。今私が代わりにSQL次のエラーを取得することを完了したい何

$stmt = $db->query($sql); //Executes a query and returns a statement 

さ...

$stmt = $db->prepare($sql); 
$stmt->bindParam(':contact_id', $contact_id, PDO::PARAM_INT); 
$stmt->execute(); 
+0

:[53] SELECT * contact_idは=連絡先FROM:contact_idのparams:1つのキー:名前: [11]:contact_id paramno = 0 name = [11] ":contact_id" is_param = 1 param_type = 1 {"Contact":null}何か案は? –

関連する問題