2009-11-03 41 views
22

Tôi có một truy vấn mysql nhắm một cột duy nhất trong một hàng duy nhấtTìm nạp các hàng duy nhất, cột duy nhất với PDO

"SELECT some_col_name FROM table_name WHERE user=:user" 

Sau khi tôi thực hiện báo cáo kết quả $stmt->execute(); làm thế nào để tôi nhận được tế bào đơn này trực tiếp đặt vào một biến không có vòng lặp? Nói cách khác làm thế nào để có được

from $stmt->execute(); 

to $col_value = 100; 

tôi đã cố gắng 2 dưới đây, nhưng không phải làm việc .. Cột là số 4 trong bảng ban đầu, nhưng tôi giả định vì trong tuyên bố chọn của tôi Tôi chọn nó chỉ , nó phải là 1 khi tôi chỉ định tham số cho fetchColumn.

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

Như bạn có thể thấy, tôi đang cố gắng làm điều đó trong một vài dòng nhất có thể.

Trả lời

30

Bạn có chắc nó trả về bất kỳ hàng nào không?
$stmt->fetchColumn()
là cách chính xác để tìm nạp một giá trị duy nhất, do đó bạn có thể không ràng buộc tham số: người dùng hoặc đơn giản là không trả về hàng nào.

+1

Cảm ơn tất cả, nó hóa ra là một cái gì đó với chính cơ sở dữ liệu. Tôi biết nó nên đã được làm việc – Chris

0

Bạn đã chuẩn bị tuyên bố trước chưa? (Trước $stmt->execute())

$stmt = $db->prepare("SELECT some_col_name FROM table_name WHERE user=:user"); 
10
$sql='SELECT some_col_name FROM table_name WHERE user=?'; 

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

$sth->execute($data); 

$result=$sth->fetchColumn(); 
0

Bạn có thể sử dụng này:

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

Tại sao theo cách này những gì bạn đề nghị? Nó đang làm gì vậy? –

+1

@KevinPanko: đó là điều tương tự nhưng tôi thích cách này, nó bình thường hóa mã trong mô hình của tôi, gọi fetch() hoặc fetchAll() với một param như: cột, cả hai ... – Mimouni

1

Tôi không chắc chắn lý do tại sao rất nhiều người đống lộn xộn này lên:

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

Hãy chắc chắn rằng bạn đang lựa chọn một cụ column trong truy vấn và không phải * hoặc bạn sẽ cần chỉ định số thứ tự cột trong fetchColumn(), ví dụ: $stmt->fetchColumn(2); Điều đó thường không phải là một ý tưởng hay vì t các cột trong cơ sở dữ liệu có thể được tổ chức lại bởi ai đó ...

Điều này sẽ chỉ hoạt động đúng với unique 'wheres'; fetchColumn() sẽ không trả lại mảng.

Các vấn đề liên quan