tinta sharpie revivir reciclar recargar recarga pizarron pizarra permanentes para marcadores marcador hacer edding como blanco blanca abrir php pdo

php - sharpie - como revivir un marcador de pizarron



Consulta parametrizada de DOP: ¿Reutilizar marcadores de posición nombrados? (3)

En esencia, tengo un valor al que tengo que llamar un par de veces en mi consulta SQL. Por lo tanto, ¿es posible reutilizar el mismo marcador de posición con nombre en la declaración, por ejemplo, SELECT :Param FROM Table WHERE Column = :Param , entonces simplemente bindValue (": Param"), y tener el valor para ambos: Params?


Aparte de la reutilización, el problema principal aquí es que está intentando cambiar dinámicamente los nombres de columna.

Esta respuesta fue publicada por un usuario anónimo en PDO::prepare :

Para aquellos que se preguntan por qué agregar comillas a un marcador de posición es incorrecto, y por qué no puede usar los marcadores de posición para los nombres de tablas o columnas:

Hay una idea errónea común acerca de cómo funcionan los marcadores de posición en las declaraciones preparadas: no se sustituyen simplemente como cadenas (escapadas), y se ejecuta el SQL resultante. En cambio, un DBMS al que se le pidió que "prepare" una declaración presenta un plan de consulta completo sobre cómo ejecutaría esa consulta, incluidas las tablas e índices que usaría, que serán los mismos independientemente de cómo complete los marcadores de posición.

El plan para "SELECT name FROM my_table WHERE id =: value" será el mismo que sustituya por ": value", pero el similar "SELECT name FROM: table WHERE id =: value" no se puede planificar, porque el DBMS no tiene idea de qué tabla vas a seleccionar.

Incluso cuando se usan "preparaciones emuladas", PDO no puede permitirle usar marcadores de posición en cualquier lugar, ya que tendría que resolver lo que quería decir: "Select: foo From some_table" mean ": foo" será una referencia de columna, o una cadena literal?

Cuando su 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, por ejemplo, usar una instrucción de cambio con una excepción en la cláusula predeterminada :.


Puede PDO::ATTR_EMULATE_PREPARES = true si configura PDO::ATTR_EMULATE_PREPARES = true .

Por ejemplo, $connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); .

Si está utilizando Laravel, puede configurarlo en una matriz de options en config/database.php . por ejemplo, PDO::ATTR_EMULATE_PREPARES => true


PDO::prepare indica que "no se puede usar un marcador de parámetro con el mismo nombre dos veces en una declaración preparada", por lo que supongo que no.