¿Puede alguien señalarme un recurso o mostrarme un ejemplo de una buena forma de escribir sentencias sql en php?Práctica recomendada para escribir sentencias sql en php
La mayoría de las declaraciones parecen tan feas e ilegibles.
¿Puede alguien señalarme un recurso o mostrarme un ejemplo de una buena forma de escribir sentencias sql en php?Práctica recomendada para escribir sentencias sql en php
La mayoría de las declaraciones parecen tan feas e ilegibles.
Evitar SELECT *
Uso ENUM
más VARCHAR
declaraciones
preparados (DOP) de PHP http://www.php.net/manual/en/intro.pdo.php
http://en.wikibooks.org/wiki/Programming:PHP:SQL_Injection
Vea la sección en la parte inferior de instrucciones con parámetros.
He visto a algunos de mis amigos diseñadores de páginas web en el desarrollo web y terminan con un código inseguro . – RavB
Esta publicación de blog aquí es una buena manera de hacerlo.
http://www.communitymx.com/content/article.cfm?page=1&cid=A5B54EAAE1BC138F
En lo personal, no incluyo las nuevas líneas vacías.
Eso es para la legibilidad de SQL; la sintaxis es SQL Server no MySQL y no hay mención de PHP ... –
personalmente me gusta separar mi SQL a cabo de esta manera:
SELECT * FROM `table` a
INNER JOIN `table2` b
ON a.`id`=b.`id`
WHERE b.`colour` = "frink"
Así me gusta poner los comandos separados en nuevas líneas que mantiene las cosas fáciles de leer.
Ejemplo de código:
$stmt = $pdo->prepare('
SELECT ...
FROM ...
JOIN ...
JOIN ...
WHERE ... AND abc = :abc AND def = :def
');
$stmt->execute(array(
'abc' => 'abc value',
'def' => 'def value'
));
Considere prepared statements
$stmt = $db->prepare("SELECT col1, col2, col3 FROM tbl WHERE col1 = ? AND col2 = ?");
$stmt->bindParam(1, $col1);
$stmt->bindParam(2, $col2);
O usando sprintf()
.
$sql = sprintf("SELECT col1, col2, col3 FROM tbl WHERE col1='%s' AND col2='%s'",
mysql_real_escape_string($col1),
mysql_real_escape_string($col2)
);
De cualquier manera, usted va a terminar con una gran cadena SQL concatenada que es más fácil de leer.
PHP Security Guide: SQL Injection. El libro Essential PHP Security es también una lectura rápida y fácil de digerir.
SQL, IMO, a menudo parece feo e ilegible debido al estrecho acoplamiento con otras capas de código. Las consultas complejas de SQL a menudo necesitan una construcción condicional y cuando comienzas a lanzar HTML entre la consulta SQL, además de la lógica de negocios, etc. el resultado es un código ilegible.
Considere usar una DAL (capa de acceso a datos) o más formalmente, la puerta de enlace de datos de tabla o simplemente una puerta de enlace SQL. Además, proporcionará ventajas increíbles:
Saludos, Alex
que utiliza un cliente de MySQL para trabajar en mis consultas (SQLWave). herramienta muy útil que te permite hacer consultas y guardarlos como SQL, se dará salida a un archivo de la siguiente manera:
/*
get-all-tags.sql
get all tags from t.tags, combine info with t.taglink to
2012-12-18: updated blabla
*/
select tags.*,group_concat(subid) as subs from t.tags
join t.taglink on taglink.id=tags.id
group by id
order by category,tag,subid
Es la disposición prefiero, pero se puede utilizar su propia preferencia por supuesto. La consulta se puede insertar en el código de la siguiente manera:
mysql_query(file_get_contents("sql/get-all-tags.sql"));
etc También se puede alterar de forma dinámica el contenido del archivo 'get-todas-tags' mediante la sustitución de cadenas con los valores que pueda necesitar.
NOTA !! NO estoy diciendo que esto sea rápido. El es una gran cantidad de gastos indirectos innecesarios en esto. Pero si quiere ir con el único propósito de mantener su código PHP limpio y claro, esta es una muy buena alternativa.
Para un mejor rendimiento, puede 'compilar' su código PHP en el código que publica reemplazando "file_get_contents (" sql/get-all-tags.sql ") con el contenido real de ese archivo antes de cargar sus cosas.
Así, de nuevo, esto no es de código rápido, pero muy legible
Por supuesto, usted puede poner el mismo formato directamente en su código PHP, sin copiarlo desde un programa de cliente:
<?
$result=mysql_query("
select tags.*,group_concat(subid) as subs from t.tags
join t.taglink on taglink.id=tags.id
group by id
order by category,tag,subid
");
?>
Sin gastos generales, sin acceso a los archivos, por lo que es (relativamente) fas t
Algunas preguntas relacionadas: http://stackoverflow.com/questions/37791/how-do-you-manage-sql-queries http://stackoverflow.com/questions/1685362/is-there-a- mejor-más-estándar-manera-de-realizar-sql-consultas-en-php-sin-usin http://stackoverflow.com/questions/1342556/how-can-i-separate-sql-from-my- php – JYelton
No escriba SQL en PHP: use los procedimientos almacenados: http://www.joeyrivera.com/2009/using-mysql-stored-procedures-with-php-mysqlmysqlipdo/ –
Acabo de ver esta pregunta. Para futuros visitantes o principiantes, esto puede ayudar: [PHP: The Right Way] (http://www.phptherightway.com/) –