El mecanismo de vinculación no funciona con los nombres de columnas o tablas.
ejemplos simples:
CREATE TABLE :bar (rowId int)
SELECT :foo FROM :bar
En el lado positivo, esto no es algo que a menudo necesita o quiere hacer.
Pero cuando lo haces ... PDO te deja colgando. La solución se concating manualmente junto a sus cadenas de consulta mientras se hace por mano de escapar:
$foo = some_escape_logic($dirtyFoo);
$bar = some_escape_logic($dirtyBar);
$db->query("SELECT {$foo} FROM {$bar}");
resultados SQL siempre se devuelven como cadenas
fetch() devuelve una matriz de valores de cadena, incluso si la tabla de SQL los tipos son numéricos Por ejemplo, una mesa con BIGINT/cadena/columnas BIGINT devuelve:
array('rowId' => '1', 'name' => 'Fred', 'age' => '12');
en lugar de:
array('rowId' => 1, 'name' => 'Fred', 'age' => 12);
Como positivo, que nunca se pierde la precisión de un desajuste entre PHP y SQL tipos. El tipo de malabarismo en PHP también asegura que rara vez se dará cuenta de que los datos fueron originalmente codificados como cadenas.
Como negativo, esto puede ser un dolor al pasar los resultados de base de datos a algo así como json_encode(), ya que va a terminar con los valores numéricos citados:
{ "rowId": "1", "name": "Fred", "age": "12" }
en lugar de
{ "rowId": 1, "name": "Fred", "age": 12 }
En un mundo ideal, los tipos de salida de autoenvío de fetch() serían controlables mediante un argumento opcional.
Lo mismo que siempre con PHP: escriba inseguro significa un desastre insoluble si el desarrollador no es disciplinado. Caza de insectos en el infierno Lo normal. – bdares
@bdares En realidad, es bastante seguro, y tu argumento va en contra de PHP y su naturaleza, no en contra de PDO. –
No sé a qué te refieres con la misma sintaxis para toda la base de datos. Si te refieres a sql, estás equivocado. Pdo es una capa de abstracción de acceso a datos y no una abstracción de base de datos, sql sigue siendo diferente. Si quiere decir hacer consultas, puede tener razón, pero escribir un envoltorio simple le proporciona lo mismo si quiere cambiar el tipo de base de datos. – frostymarvelous