<?php select1($conn); function select2 ($conn,$id ,$name) { $stmt = $conn->prepare("SELECT def FROM define WHERE id = ?"); mysqli_stmt_bind_param($stmt, 'i', $id); $stmt->execute(); $stmt->bind_result($def); while($stmt->fetch()) { echo $def . “<br>” } $stmt->close(); } function select1 ($conn){ $stmt2 = $conn->prepare("SELECT id , name FROM words"); $stmt2->execute(); $stmt2->bind_result($id, $name); while($stmt2->fetch()) { select2 ($conn,$id ,$name); } } ?>Tengo 2 funciones php para seleccionar datos de la base de datos. cada registro en palabras tiene múltiples registros en la tabla definida que necesito seleccionar. La primera función está funcionando correctamente. el problema es que la segunda función no funciona.
Como menciona @u_mulder, tiene comillas dobles incorrectas en uso.
Correcto:
$stmt = $conn->prepare("SELECT def FROM define WHERE id = ?");
Incorrecto:
$stmt2 = $conn->prepare("SELECT id , name FROM words”);
El carácter ” no es lo mismo que el carácter " . Esto causará un problema en su consulta. Ver más: https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
Limpiado:
<?php select1($conn); function select2($conn, $id, $name){ $stmt = $conn->prepare("SELECT def FROM define WHERE id = ?"); $stmt->bind_param('i', $id); $stmt->execute(); $stmt->bind_result($def); while($stmt->fetch()) { echo $def . "<br>" } $stmt->close(); } function select1 ($conn){ $stmt2 = $conn->prepare("SELECT id, name FROM words"); $stmt2->execute(); $stmt2->bind_result($id, $name); while($stmt2->fetch()) { select2($conn, $id, $name); } } ?> Luego de una inspección adicional, no veo dónde usa $id o $name , por lo que no estoy seguro de por qué está realizando 2 consultas. Aconsejaría una consulta de unión.
<?php function select1 ($conn){ $stmt = $conn->prepare("SELECT w.id, w.name, d.define FROM words AS w INNER JOIN define AS d ON w.id = d.id"); $stmt->execute(); $stmt->bind_result($id, $name, $def); while($stmt->fetch()) { echo "($id) $name $def<br />"; } } ?>Actualizar
Si tienes words de tabla:
+----+--------+ | id | name | +----+--------+ | 1 | 'John' | | 2 | 'Mary' | | 3 | 'Bob' | +----+--------+ Y la tabla define :
+----+--------------+ | id | def | +----+--------------+ | 1 | 'Some stuff' | | 1 | 'Other stuff'| | 1 | 'More stuff' | | 2 | 'Weird stuff'| | 2 | 'Kind stuff' | | 3 | 'Just stuff' | +----+--------------+Nos referimos a esto: ¿Cuál es la diferencia entre "INNER JOIN" y "OUTER JOIN"?
La consulta podría ser una unión regular:
SELECT a.id, a.name, b.def FROM word AS a JOIN define AS b ON a.id = b.id;El conjunto de resultados debe ser:
+----+--------+--------------+ | id | name | def | |----|--------|--------------| | 1 | 'John' | 'Some stuff' | | 1 | 'John' | 'Other stuff'| | 1 | 'John' | 'More stuff' | | 2 | 'Mary' | 'Weird stuff'| | 2 | 'Mary' | 'Kind stuff' | | 3 | 'Bob' | 'Just stuff' | +----+--------+--------------+Espero que esto ayude a explicar tus opciones.