Luego de observar en varios repositorios y foros de internet al terminar nos encontramos con la solución que te compartimos a continuación.
Solución:
Si desea insertar un NULL
valor en MySQL, tienes que pasar un null-valor en la consulta SQL, no el string de null. seguirá siendo un string desde una perspectiva de PHP, pero no desde la perspectiva de MySQL.
if (!empty($_POST['comment']))
$comment = "'".$mysqli->real_escape_string($_POST['comment'])."'";
else
$comment = "NULL";
También puede acortar eso en una sola línea, usando un operador ternario
$comment = !empty($_POST['comment']) ? "'".$mysqli->real_escape_string($_POST['comment'])."'" : "NULL";
Entonces, debido a que asignas las comillas alrededor del comentario-string mismo, como debe hacer, ya que alternativamente quiere pasar un null-value, debe eliminar las comillas simples que rodean la variable de la consulta. De lo contrario, esto también lo rompería, ya que obtendría ''comment''
.
$sql = "INSERT INTO table (comment) VALUES (".$comment.")";
Por supuesto, esto supone que la columna comment
permite para null-valores. De lo contrario, fallará, en cuyo caso debe insertar cadenas vacías o cambiar la columna para aceptar null valores.
También se debe tener en cuenta que esta consulta está expuesta a ataques de inyección de SQL, y debe usar una API que admita declaraciones preparadas, como PDO o MySQLi, y utilizarlas para proteger su base de datos contra este tipo de ataques. El uso de una declaración preparada con MySQLi se vería así. Vea cómo suministramos un PHP null
al valor en bind_param()
si $_POST['comment']
esta vacio.
// Set MySQLi to throw exceptions on errors, thereby removing the need to individually check every query
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
if (isset($_POST['folge']))
// $comment = !empty($_POST['comment']) ? $_POST['comment'] : null; // Ternary operator
$comment = $_POST['comment'] ?? null; // Null coalescing operator, since PHP 7
$sql = "INSERT INTO eventstest (comment) VALUES (?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $comment);
$stmt->execute();
$stmt->close();
- Operador ternario de PHP
- ¿Cómo puedo evitar la inyección de SQL en PHP?