DB_common::getOne() -- クエリを実行し、最初の行の最初のカラムを返す
説明
指定したクエリを実行し、結果の最初の行・最初のカラムのデータを返したあとで
結果セットを開放します。
パラメータ
- string
$query
SQL クエリあるいはプリペアドステートメント。
- mixed
$params
プリペアドステートメントに追加される、配列・文字列あるいは数値のデータ。
配列の要素数は、クエリ内のプレースホルダの数と同じでなければなりません。
配列以外を指定した場合はプレースホルダがひとつであることを意味し、
配列を指定した場合は配列の個々の要素がそれぞれのパラメータに対応します。
指定された場合は、
prepare()/
execute() が使用されます。
返り値
mixed - 最初のカラムのデータ (データがない場合は NULL)、あるいは失敗した場合に
DB_Error オブジェクトを返します。
例外・エラー
表 39-1PEAR_Error の値
| エラーコード | エラーメッセージ | 原因 | 対応法 |
|---|
| DB_ERROR_INVALID |
invalid
|
準備された SQL 文が無効です。
|
プレースホルダを使用する SQL 文を用いる場合は
prepare() のドキュメント
を参照ください。
|
| DB_ERROR_MISMATCH |
mismatch
|
パラメータの数が、プリペアドステートメント中の
プレースホルダの数と一致しません。
|
$query に渡した
prepare() 済みの文中の
プレースホルダの数が、$params
で渡した項目の数と一致するかどうかを調べます。
|
| DB_ERROR_NODBSELECTED |
no database selected
|
データベースが選択されていません。
|
connect() の際の
DSN
を調べます。
|
| その他のエラーコード | |
データベース固有のエラー。
|
PHP マニュアル
のデータベース関連の部分を調べ、エラーの原因を判断してください。
たいていの場合は SQL 文が間違っていることが原因です。例えば
Oracle データベースに対して SQL で LIMIT を使用しているなどが
考えられます。
|
注意
この関数は、スタティックにコールする
ことはできません。
例
例 39-1getOne() の使用法
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$data =& $db->getOne('SELECT cf FROM foo');
if (PEAR::isError($data)) {
die($data->getMessage());
}
echo "$data\n";
?>
|
|
例 39-2
プレースホルダがひとつの場合の getOne() の使用法
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$data =& $db->getOne('SELECT cf FROM foo WHERE nf = ?',
5);
if (PEAR::isError($data)) {
die($data->getMessage());
}
echo "$data\n";
?>
|
|
例 39-3
プレースホルダがふたつの場合の getOne() の使用法
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$data =& $db->getOne('SELECT cf FROM foo WHERE nf IN (?, ?)',
array(5, 10));
if (PEAR::isError($data)) {
die($data->getMessage());
}
echo "$data\n";
?>
|
|
|
DB_common::getListOf() (Previous)
|
(Next) DB_common::getOption()
|
|
|
Download Documentation
|
Last updated: Sun, 06 Jul 2008 |
|
Do you think that something on this page is wrong? Please file a bug report or add a note.
|
| User Notes: |
Note by: webmaster@metapundit.net
Be careful using getOne() on columns that may contain null values - you now have no way of knowing whether your query matched any rows or not. Consider the table
users
|id|name|
---+----+
1 | test
2 | NULL
---------
<?php
var_dump($db->getOne('select name from users where id=1'));
var_dump($db->getOne('select name from users where id=2'));
var_dump($db->getOne('select name from users where foo=1'));
?>
will output "NULL", "NULL", and a db_error object.
|
|