2012-04-25 18 views
0

私はNetTutsからPDOを学習しており、これまで文字列に基づいてFETCH_ASSOCを検索して成功しました。PHP PDO Select ID

質問:整数で検索するには、どちらがPDO::が必要ですか?私はそれがPDO::Fetch_OBJだと思った。以下はfalseを返す。

$busid = $this->sanitize($string); 

$database->query('SELECT name, address FROM business_information WHERE id = :id', array(':id' => $busid)); 
var_dump($database); 
    if($database->count() >= '1') { 
       $results->setFetchMode(PDO::FETCH_OBJ); 
        while($row = $results->fetch()) { 
         $test = "Name: ".$row['name']." Address: ".$row['address'];    

    }else{ 
     $test = "no results were found"; 

    } 

のvar_dumpリターン:

オブジェクト(データベース)#1(7){[ "PDO": "データベース":プライベート] =>オブジェクト(PDO)#2(0) { } ["port"] => int(3306)["statement"] =>オブジェクト(PDOStatement)#6(1){ ["queryString"] =>文字列(61) "SELECT name、address FROM business_information WHERE id =:id "}}

+0

[DByte](https://github.com/Xeoncross/DByte)のような単純なPDOライブラリを使用することをお勧めします。 – Xeoncross

+3

汚れたコードでその奇妙なライブラリ(DByte)を使用することはお勧めしません。 PDOは、ラッパーなしで使用するのに十分シンプルです(PDOは既にラッパーです)。 –

+1

@Xeoncross:あなたのプロジェクトとの関係についての開示は適切でしょう。 –

答えて

0

1)準備されたステートメントは、サニタイズよりも優れています。
2)PDO :: queryに別の署名がありますので、マニュアルをお読みください。

/** @var \PDO $PDO */ 
$query = $PDO->prepare('SELECT name, address FROM business_information WHERE id = :id'); 
if (!$query) return false; 
if (!$query->execute(array(':id' => $busid))) return false; 
$results = $query->fetchAll(\PDO::FETCH_ASSOC); 
if (empty($results)) return false; 
foreach ($results as $row) 
{ 
    $test = "Name: ".$row['name']." Address: ".$row['address']; 
    echo $test, PHP_EOL; 
} 
+0

ありがとうOZ!私はprepare文とquery文を確実に調べます。 –

0

発砲前の声明prepareそれをデータベースに送ります。どうして?答えはPDO::prepareの近くです。 prepareを使用すると、戻り値としてPDOStatementが保持されます。

Okey。

PDOStatement::bindValueが署名を見てみましょう::とプレースホルダにバインド値をすることができます

`bool PDOStatement::bindValue(mixed $parameter, 
           mixed $value 
           [,int $data_type=PDO::PARAM_STR])` 

data_type:PDO :: PARAM_ *定数を使用してパラメータの明示的なデータ型。 data_typeを手動で設定できますが、99%の時間では必要ありません。 (私が見つけたように)