PHP MySQL – Función

Escribí una función de PHP pero no hace nada en un punto específico. Soy nuevo en php y mi inglés es malo, lo siento por eso.

 

el código se ejecuta cada vez hasta un punto específico (lo marqué en el código con // —— MOSTRAR AQUÍ !!!! ———— // )

en la tabla sql, actualmente no hay entrada. entonces debería crear una nueva fila

¿Qué pasa con ese código? 🙁

Solutions Collecting From Web of "PHP MySQL – Función"

Combinando lo que otras personas han dicho, y mirando la lógica de lo que estás haciendo, parece que tienes algunos problemas fundamentales:

He modificado algunos nombres de variables para que quede más claro lo que está obteniendo, salpicado el código con comentarios que describen los problemas.

He ignorado los problemas de inyección SQL.

 < ?php function SQLwriteRecent($id, $title, $link) { $con=mysqli_connect("localhost","","",""); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $countQuery = mysqli_query($con,"SELECT count FROM recent WHERE sc_stream='$id'"); $numberOfRowsReturnedByQuery = mysqli_num_rows($count); if ( $numberOfRowsReturnedByQuery > 0 ) { $valueOfCountInQuery = $countQuery [0]['count']; } if( $numberOfRowsReturnedByQuery == 0) { try { // In this situation it looks like you want to set up a value in "recent" - IE you didn't have a record. // But think about it for a second - if you had no record in "recent" then how could "$valueOfCountInQuery" possibly be set? mysqli_query($con,"INSERT INTO recent (title, link, sc_stream, count) VALUES ('$title', '$link', '$id',$valueOfCountInQuery )"); // makes no sense to use "$valueOfCountInQuery" - maybe you mean "0" (zero) mysqli_close($con); return 1; } catch(Exception $e) { return 0; } } else { try { // In this situation it looks like you want to update the value in "recent" - IE you DID have a record and you want to change it. // But think about it for a second - the value of "$valueOfCountInQuery" is the value that you got from "count" on "recent". You are setting it to the same value that's already in there! // ------ SHOW HERE!!!! ------------ // mysqli_query($con,"UPDATE recent SET count=$valueOfCountInQuery WHERE sc_stream='$id'"); // redundant mysqli_close($con); return 2; } catch(Exception $e) { return 0; } } } ?> 

Su script no insertará una nueva fila, porque ha definido $ count, es un objeto mysqli_result. Debes verificar si hay una fila, algo que podrías hacer así;

En lugar de

 if(!isset($count)) 

utilizar

 if(mysqli_num_rows($count) == 0) 

Alguna explicación:

Usted tiene esto en su código:

 if(!isset($count)) { 

Esto verifica que su variable ha sido configurada, ni está empty , es false o 0 . Esta condición SIEMPRE devuelve true porque la variable se configuró en la línea anterior, use mysqli_nuw_rows en mysqli_nuw_rows lugar

Hiciste un error aquí, la matriz devuelve la consulta intenta esto

 mysqli_query($con,"UPDATE recent SET count=$count[0]['count'] WHERE sc_stream='$id'"); 

Ha establecido:

count=$count

pero

$count = mysqli_query($con,"SELECT count FROM recent WHERE sc_stream='$id'");

Especifique un valor adecuado para contar, no un recurso

para recuperar el resultado real de la consulta, tienes que hacer algo como

 if ( $result = $con->query($sql)){ //perform the query if ($result->num_rows == 1){ if ($row = $result->fetch_assoc()){ $count = $row['count']; } else{ echo "couldn't fetch result row"; } else { echo "expected one result row, got ".$result->num_rows; } } else { echo "query failed:".$sql; echo $con->errno.' '.$con->error; } 

// si tienes más de una fila de resultados

 if ( $result = $con->query($sql)) while ($row = $result->fetch_assoc()){ //loop through the result(s) $count = $row['count'] } 

// estilo de procedimiento

 if ( $result = mysqli_query($con,$sql)) while($row = mysqli_fetch_assoc($result)){