1

Hago esta consulta en PHP/MySQL y quiero que los registros estén ordenados por el campo nom Pero no muestra nada.

$stm = $BD->prepare("SELECT a.cod, a.nom, b.id_pago, c.planilla
FROM sc_personal a,
sc_condicion b,
sc_planilla c
WHERE  a.id_condicion = b.id_condicion
AND  a.id_trab = c.id_trab
AND  a.cod ='.$valor'. ORDER BY a.nom ASC");

Antes terminaba en:

AND  a.cod =".$valor);

Y no había problema, ahora le agregué el ORDER BY y no muestra nada. Cuál es el problema?

Puntay
  • 1,178
  • 2
  • 12
  • 27
  • Estas concatenando mal, pero la pregunta es ¿Por que concatenas valores si estas utilizando sentencias preparadas? – Xerif Sep 04 '17 at 22:17
  • 1
    La respuesta de @Xerif enfoca muy bien el problema , aunque también yo haría mi consulta usando `JOIN`... así el código es más fácil de entender y mantener. – A. Cedano Sep 05 '17 at 02:23
  • Cierto @A.Cedano no me fije en la consulta sinceramente, pero bien visto. – Xerif Sep 05 '17 at 09:22
  • @A.Cedano Usando Join sería más eficiente? – Puntay Sep 05 '17 at 20:25
  • 1
    @Piropeator **[yo plantee esa duda hace un tiempo](https://es.stackoverflow.com/q/74498/29967)** y al parecer no hay diferencia en el rendimiento. De todos modos, creo que con `JOIN` el código queda más fácil de entender. – A. Cedano Sep 05 '17 at 20:51

2 Answers2

4

No deberías concatenar valores en las sentencias preparadas. Los valores deberían ser ligados. Ademas tienes un error concatenando.

Ejemplo de como podría quedar:

$stm = $BD->prepare("SELECT a.cod, a.nom, b.id_pago, c.planilla
FROM sc_personal a,
sc_condicion b,
sc_planilla c
WHERE  a.id_condicion = b.id_condicion
AND  a.id_trab = c.id_trab
AND  a.cod = ? ORDER BY a.nom ASC");

// Ligamos el valor
$stmt->bind_param('s', $valor);
// Ejecutamos
$stmt->execute();
Xerif
  • 7,283
  • 3
  • 17
  • 41
0

Estás concatenando mal, intenta de esta forma:

$stm = $BD->prepare("SELECT a.cod, a.nom, b.id_pago, c.planilla
                     FROM sc_personal a,
                          sc_condicion b,
                          sc_planilla c
                     WHERE  a.id_condicion = b.id_condicion
                     AND  a.id_trab = c.id_trab
                     AND  a.cod ='" . $valor . "' ORDER BY a.nom ASC");
Jorius
  • 6,109
  • 9
  • 28
  • 55