statement sentencia preparada insertar datos con clase bind_param php mysql null mysqli prepared-statement

php - insertar - select sentencia preparada



usando nulos en una declaraciĆ³n preparada mysqli (5)

En una declaración preparada mysqli, un NULL se convierte en '''' (en el caso de una cadena) o 0 (en el caso de un entero). Me gustaría almacenarlo como un NULL verdadero. ¿Hay alguna forma de hacer esto?


a mi lado, guardo todos los parámetros en una matriz y los paso en la función Bind_param mediante array_shift ($ myArray). NULL se acepta así .. S.


Sé que este es un hilo antiguo, pero es posible vincular un valor NULL verdadero a las declaraciones preparadas (léase esto ).

De hecho, puede usar mysqli_bind_parameter para pasar un valor NULL a la base de datos. simplemente cree una variable y almacene el valor NULL (vea la página de manual para él) en la variable y vincúlelo. Funciona muy bien para mí de todos modos.

Por lo tanto, tendrá que ser algo así como:

<?php $mysqli = new mysqli(''localhost'', ''my_user'', ''my_password'', ''world''); // person is some object you have defined earlier $name = $person->name(); $age = $person->age(); $nickname = ($person->nickname() != '''') ? $person->nickname() : NULL; // prepare the statement $stmt = $mysqli->prepare("INSERT INTO Name, Age, Nickname VALUES (?, ?, ?)"); $stmt->bind_param(''sis'', $name, $age, $nickname); ?>

Esto debería insertar un valor NULL en la base de datos.


Para cualquiera que venga a esto porque están teniendo problemas vinculando a NULL en su declaración WHERE , la solución es esta:

Hay un operador seguro mysql NULL que se debe usar:

<=>

Ejemplo:

<?php $price = NULL; // NOTE: no quotes - using php NULL $stmt = $mysqli->prepare("SELECT id FROM product WHERE price <=> ?"); // Will select products where the price is null $stmt->bind_param($price); ?>


<?php $mysqli=new mysqli(''localhost'',''root'','''',''test''); $mysqli->query("CREATE TABLE test_NULL (id int(11))"); if($query=$mysqli->prepare("insert into test_NULL VALUES(?)")){ $query->bind_param(''i'',$null); //note that $null is undefined $query->execute(); }else{ echo __LINE__.'' ''.$mysqli->error; } ?>


Los comentarios a la documentación de PHP en mysqli_stmt::bind_param indican que pasar en NULL no fue posible.

Por favor, vea la respuesta de @ creatio: https://.com/a/6892491/18771

Las soluciones ofrecidas en los comentarios hacen un trabajo de preparación previa en la declaración preparada, reemplazando el "?" marcadores con "NULL" para cada parámetro que tiene el valor null PHP. La cadena de consulta modificada se usa.

La siguiente función es del comentario del usuario 80119 :

function preparse_prepared($sQuery, &$saParams) { $nPos = 0; $sRetval = $sQuery; foreach ($saParams as $x_Key => $Param) { //if we find no more ?''s we''re done then if (($nPos = strpos($sQuery, ''?'', $nPos + 1)) === false) { break; } //this test must be done second, because we need to //increment offsets of $nPos for each ?. //we have no need to parse anything that isn''t NULL. if (!is_null($Param)) { continue; } //null value, replace this ? with NULL. $sRetval = substr_replace($sRetval, ''NULL'', $nPos, 1); //unset this element now unset($saParams[$x_Key]); } return $sRetval; }

(No es realmente el estilo de codificación en el que lo hubiera hecho, pero si funciona ...)