web-dev-qa-db-ja.com

PDOを使用した単一行、単一列のフェッチ

単一の行の単一の列をターゲットにするmysqlクエリがあります

_"SELECT some_col_name FROM table_name WHERE user=:user"
_

ステートメント$stmt->execute();を実行した後、この単一のセルをループなしで変数に直接配置するにはどうすればよいですか?言い換えれば、取得する方法

_from $stmt->execute();

to $col_value = 100;
_

以下の2つを試しましたが、どちらも機能しませんでした。列は元のテーブルの4番ですが、selectステートメントではそれだけを選択しているので、fetchColumnのパラメーターを指定するときは1であると想定しています。

_$col_value = $stmt->fetchColumn();
$col_value = $stmt->fetchColumn(0);
_

ご覧のとおり、できる限り数行で実行しようとしています。

26
Chris

行が返されていることを確認しますか?
$stmt->fetchColumn()
は単一の値をフェッチする正しい方法であるため、おそらく:userパラメータをバインドしていないか、単に行を返しませんでした。

33
reko_t
$sql='SELECT some_col_name FROM table_name WHERE user=?';

$sth=$pdo_dbh->prepare($sql);
$data=array($user);

$sth->execute($data);

$result=$sth->fetchColumn();
11
JAL

なぜこんなに多くの人がこれを台無しにするのか分かりません:

_$stmt = $dbh->prepare("SELECT `column` FROM `table` WHERE `where`=:where"); 
$stmt->bindValue(':where', $MyWhere);
$stmt->execute();
$SingleVar = $stmt->fetchColumn();
_

クエリで_*_ではなく特定のcolumnを選択していることを確認してください。そうでない場合は、fetchColumn()で列の順序番号を指定する必要があります。例:$stmt->fetchColumn(2);データベースの列は誰かによって再編成される可能性があるため、通常、これは良い考えではありません...

これは_unique 'wheres'_でのみ正しく機能します。 fetchColumn()は配列を返しません。

1
Matthew

あなたはこれを使うことができます:

$stmt->fetch(PDO::FETCH_COLUMN, $number_of_column);
0
1nstinct

最初にステートメントを準備しましたか? (以前は$stmt->execute()

$stmt = $db->prepare("SELECT some_col_name FROM table_name WHERE user=:user");
0
True Soft