<form action="hi.php" method="post">
<input type="text" name="id" />
<input type="hidden" name="name" value="name" />
</form>
我发送的输入没有任何值。我要更新id
列为 NULL
。
$id = $_POST['id'];
$name = $_POST['name'];
$mysqli->query("UPDATE table SET id=$id WHERE name='$name');
但是,这会将其更新为空而不是 NULL
。如何在 $id
中插入 NULL ?
如果我发送一个值 <input name="id">
,它会正确更新它。但是,如果我将其发送为空,列就会变为空,我希望它为 NULL
.
最佳答案
当使用prepared statements时和参数,其中一个参数中的 NULL 值也会被 MySQL 服务器视为 NULL。
HTTP 参数作为字符串传输。如果没有为输入控件指定值,则键/值对的值将为空字符串 (!=NULL)。但是您仍然可以在脚本中使用诸如 if(emptystring) use NULL
之类的内容。
例如
<?php
// only for this example; otherwise leave _POST alone....
$_POST['id'] = 1;
$_POST['name'] = '';
$mysqli = new mysqli('localhost', 'localonly', 'localonly', 'test');
if ($mysqli->connect_errno) {
trigger_error( sprintf('mysqli connect error (%d) %s', $mysqli->connect_errno, $mysqli->connect_error), E_USER_ERROR);
die;
}
mysqli_report(MYSQLI_REPORT_STRICT|MYSQLI_REPORT_ALL); // that's all the "error handling" for this example....
setup($mysqli);
// even if the user didn't fill in any value, the parameters should be in the request
// as empty strings
if ( !isset($_POST['name'], $_POST['id']) ) {
echo 'missing POST paramete';
}
else {
// <-- maybe some plausiblity checks here anyway; e.g. some assumptions about the id you can test, leaving it out as optional for now --->
// decision point: applying trim() to _POST[name] and _then_ consider it NULL or not - you might disagree about the specifics, just an example.
$name = trim($_POST['name']);
if ( 0===strlen($name) ) {
$name = NULL;
}
// <-- actually it would suffice to establish the databse connection here....
$stmt = $mysqli->prepare('UPDATE soFoo set name=? WHERE id=?');
$stmt->bind_param('ss', $name, $_POST['id']);
$stmt->execute();
printTable($mysqli);
}
function printTable($mysqli) {
$result = $mysqli->query('SELECT * FROM soFoo ORDER BY id');
foreach( $result as $row ) {
var_export($row); echo "\r\n";
}
}
function setup($mysqli) {
$mysqli->query('CREATE TEMPORARY TABLE soFoo (id int, name varchar(32), primary key(id))');
$mysqli->query("INSERT INTO soFoo (id,name) VALUES(1,'oldname1'),(2,'oldname2')");
}
打印
array (
'id' => '1',
'name' => NULL,
)
array (
'id' => '2',
'name' => 'oldname2',
)
关于php - 更新为 NULL Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35687384/