En esencia, tengo un valor que tengo que llamar un par de veces en mi consulta SQL. Por lo tanto, ¿es posible reutilizar el mismo marcador de posición nombrado en la declaración, p. SELECT :Param FROM Table WHERE Column = :Param
, luego simplemente bindValue (": Param"), y tiene el valor para ambos: ¿Params?PDO Parameterized Query - ¿Reutiliza named placeholders?
Respuesta
PDO::prepare indica que "no se puede usar un marcador de parámetro con nombre del mismo nombre dos veces en una declaración preparada", así que supongo que es un no entonces.
Los documentos no son completamente correctos. Si 'PDO :: ATTR_EMULATE_PREPARES' es' true', PDO * SES * admite la reutilización de marcadores de parámetros nombrados. – Mike
Parece que alguien actualizó los documentos. Ahora dice "No se puede usar un marcador de parámetro con nombre del mismo nombre más de una vez en una declaración preparada, a menos que el modo de emulación esté activado". – Mike
Tienes razón en parte. Sin embargo, 'SELECT: Param' es imposible, ya que no puede enlazar tablas/columnas. Consulte http://stackoverflow.com/q/182287/ –
Además de la reutilización, el problema principal aquí es que está intentando cambiar dinámicamente los nombres de los cols.
Esta respuesta Publicado por un usuario anónimo en http://php.net/manual/en/pdo.prepare.php:
Para los que se preguntan por qué la adición de cotizaciones a alrededor de un marcador de posición es incorrecta, y por qué no se puede utilizar marcadores de posición para los nombres de tabla o columna:
Existe un error común acerca de cómo funcionan los marcadores de posición en las declaraciones preparados: no se sustituyen simplemente como cadenas escapadas y se ejecuta el SQL resultante. En cambio, un DBMS pedido "preparar" una declaración surge con un plan de consulta completo de cómo ejecutaría esa consulta, incluidas las tablas e índices que usaría , independientemente de cómo se rellene el marcadores de posición.
El plan de "seleccione el nombre desde mi_tabla donde id =: valor" será el mismo lo que sustituto de ": valor", pero el aparentemente similares "seleccione el nombre desde: tabla WHERE id =: valor" no puede planeado, porque el DBMS no tiene idea de qué tabla realmente va a seleccionar.
incluso cuando se utiliza "emulado prepara", PDO no puede dejar de usar marcadores de posición en cualquier lugar, ya que tendría que trabajar en lo que significado: significa "Seleccionar: foo De some_table" media ": foo" va a ser una referencia de columna , o una cadena literal?
Cuando la consulta utiliza una referencia de columna dinámica, debe incluir explícitamente en la lista blanca las columnas que sabe que existen en la tabla, p. Ej. utilizando una instrucción switch con una excepción lanzada en la cláusula default:
Puede si establece PDO::ATTR_EMULATE_PREPARES = true
.
E.g. $connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
.
Si está utilizando Laravel, puede configurarlo en una matriz options
en config/database.php
. p.ej. PDO::ATTR_EMULATE_PREPARES => true
- 1. PDO :: exec() o PDO :: query()?
- 2. C# Parameterized Query MySQL con la cláusula `in`
- 3. Spring Parameterized/Theories JUnit Tests
- 4. PDO :: query vs. PDOStatement :: execute (PHP y MySQL)
- 5. Declaración preparada de PHP PDO - MySQL LIKE query
- 6. Nesting Sitecore sublayouts/placeholders - posible?
- 7. ¿Cómo newCachedThreadPool reutiliza los hilos?
- 8. con fluidez nhibernate named-query sin usar el archivo hbm para el mapa
- 9. ¿Qué bibliotecas necesito para usar std :: placeholders?
- 10. PDO MySQL: inserte varias filas en una consulta
- 11. PHP PDO Preparar consultas
- 12. ¿Cómo bindValue con% en PDO?
- 13. WINE y Windows named pipes
- 14. swig no module named _example
- 15. Escribir a fifo (named pipe)
- 16. Named Constructor Idiom and Templates?
- 17. ¿Cómo funciona PHP PDO internamente?
- 18. php pdo prepare variables repetitivas
- 19. PDO consultas múltiples
- 20. mix of Select2 Loading Remote Data with Placeholders menú desplegable
- 21. PHP PDO Transacciones?
- 22. consulta de PDO vs ejecutar
- 23. PDO consultas sin búfer
- 24. ¿De qué manera Phusion Passenger reutiliza hilos y procesos?
- 25. ¿NodeJS reutiliza módulos ya cargados y comparte sus valores?
- 26. Sql Query System System Hotel Query?
- 27. Usando parámetros nombrados con PDO para LIKE
- 28. ¿Cómo crear named pipe (mkfifo) en Android?
- 29. ManagedProperty en CDI @Named bean devuelve nulo
- 30. ImportError: No Module named bs4 (BeautifulSoup)
¿Por qué no lo intentas? PDO :: prepare dice yes y PDOStatement :: execute dice que puede ser necesario cerrar el cursor db en función del controlador. –
Lo probé, seguí recibiendo un error, pero pensé que estaba haciendo algo diferente. No se pudo encontrar nada en los documentos (estaba buscando en PDO :: bindParam). Lo encontré en PDO :: preparate, ¡gracias por indicarme la dirección correcta! – gamers2000
FYI - esto respondió exactamente mi pregunta también. 1 up para ti :) – meteorainer