valores una por otra mandar llamar librería funciones funcion dentro definicion defecto cómo creamos basicas archivo php mysqli prepared-statement

una - php funciones valores por defecto



¿Por qué obtengo este error de llamada de función en un objeto que no es objeto cuando invoco una función en un objeto? (3)

$ this-> link-> prepare this statement no devuelve el objeto por lo que le está dando el error

Error:

Error grave: llamada a una función miembro bind_param () en un objeto no disponible en /var/www/web55/web/pdftest/events.php en la línea 76

Código:

public function countDaysWithoutEvents(){ $sql = "SELECT 7 - COUNT(*) AS NumDaysWithoutEvents FROM (SELECT d.date FROM cali_events e LEFT JOIN cali_dates d ON e.event_id = d.event_id WHERE YEARWEEK(d.date) = YEARWEEK(CURRENT_DATE()) AND c.category_id = ? GROUP BY DAY(d.date) ) AS UniqueDates"; $stmt = $this->link->prepare($sql); $stmt->bind_param(''i'', $this->locationID); $stmt->execute(); $stmt->bind_result($count); $stmt->close(); return $count; }

$this->link->prepare($sql) crea una declaración preparada para MySQLi.

¿Por qué recibo este error?


Creo que el problema es obviamente con la función de preparación ...

La función probablemente esté fallando, en cuyo caso $ stmt sería FALSO y, por lo tanto, no tiene el método bind_param como miembro.

Del manual php mysqli :
mysqli_prepare () devuelve un objeto de declaración o FALSE si ocurre un error.

¡Consulta tu consulta! Tal vez haya un problema con tu declaración SELECT. Y también compruebe si es FALSO antes de intentar ejecutar cualquier función miembro en lo que cree que es un objeto devuelto por la función de preparación.

if($stmt === FALSE) die("Prepare failed... ");// Handle Error Here // Normal flow resumes here $stmt->bind_param("i","");



EDITAR

Sospecho que la declaración puede estar extrayendo un error debido a la subconsulta:

SELECT d.date FROM cali_events e LEFT JOIN cali_dates d ON e.event_id = d.event_id WHERE YEARWEEK(d.date) = YEARWEEK(CURRENT_DATE()) AND c.category_id = ? GROUP BY DAY(d.date)

En cambio, ¿por qué no escribes tu consulta de esta manera?

public function countDaysWithoutEvents() { $count = FALSE; $sql = "SELECT COUNT(d.date) "; $sql .= " FROM cali_events e "; $sql .= " LEFT JOIN cali_dates d ON e.event_id = d.event_id "; $sql .= " WHERE YEARWEEK(d.date) = YEARWEEK(CURRENT_DATE()) "; $sql .= " AND c.category_id = ? "; $sql .= " GROUP BY DAY(d.date) "; $stmt = $this->link->prepare($sql); if($stmt !== FALSE) { $stmt->bind_param(''i'', $this->locationID); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); // I think you need to do a fetch // here to get the result data.. $stmt->close(); }else // Or, provide your own error die("Error preparing Statement"); // handling here return (7 - $count); }

PD. Creo que también faltó una llamada para buscar ... (ver el ejemplo anterior)


AND c.category_id = ? - no hay un alias de tabla c en su consulta.

Además de ese intento

$stmt = $this->link->prepare($sql); if (!$stmt) { throw new ErrorException($this->link->error, $this->link->errno); } if (!$stmt->bind_param(''i'', $this->locationID) || !$stmt->execute()) { throw new ErrorException($stmt->error, $stmt->errno); }