php - 更新为 NULL Mysql

标签 php mysql sql-update

<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/

相关文章:

php - 扩展 PHP 网站

php - 如何按频率对Sql列进行排序并选择行

php - SQL、PHP更新查询错误

mysql - 使用 maxdate 更新行,其中给出了 id from select 和 maxdate from select

java - 无法更新 android sqlite 中的行

php - 使用子查询搜索多个表

php - 我如何使用php从字符串中提取日期

Mysql json列输出反斜杠

postgresql - 使用许多常见的子表达式进行更新

javascript - 在 AngularJS 中处理缓存和更新的 JSON 文件