2009-11-03 20 views
22

Tengo una consulta de MySQL que se dirige a una sola columna en una sola filaObtención de una hilera, con una sola columna con DOP

"SELECT some_col_name FROM table_name WHERE user=:user" 

Después de ejecutar la instrucción $stmt->execute(); cómo consigo esta sola célula se coloca directamente en una variable sin bucles En otras palabras, cómo conseguir

from $stmt->execute(); 

to $col_value = 100; 

He probado el 2 a continuación, pero tampoco trabajado .. La columna es el número 4 en la tabla original, pero estoy asumiendo ya que en mi instrucción de selección que estoy seleccionando sólo , debe ser 1 cuando especifique el parámetro para fetchColumn.

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

Como se puede ver, estoy tratando de hacerlo en el menor número de líneas como sea posible.

Respuesta

30

¿Estás seguro de que devuelve las filas?
$stmt->fetchColumn()
es la forma correcta de recuperar un solo valor, por lo que probablemente no vinculó el parámetro: user o simplemente no devolvió las filas.

+1

Gracias a todos, resultó ser algo con la base de datos en sí. Sabía que debería haber estado funcionando – Chris

0

¿Ha preparado la declaración primero? (Antes de $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

Usted podría utilizar esto:

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

¿Por qué es esto lo que recomiendas? ¿Qué está haciendo? –

+1

@KevinPanko: es lo mismo pero me gusta de esta manera, normalizo el código en mi modelo, llamando a fetch() o fetchAll() con un param como: columna, ambos ... – Mimouni

1

No estoy seguro de por qué tantas personas estropear esto:

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

Asegúrese de que está seleccionando una específica en el column consulta y no * o tendrá que especificar el número de orden de la columna en fetchColumn(), ejemplo: $stmt->fetchColumn(2); Eso generalmente no es una buena idea porque t Las columnas en la base de datos pueden ser reorganizadas por alguien ...

Esto solo funcionará correctamente con unique 'wheres'; fetchColumn() no devolverá una matriz.

Cuestiones relacionadas