更新为NULL Mysql

时间:2016-02-28 19:47:03

标签: 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

2 个答案:

答案 0 :(得分:1)

使用prepared statements和参数时,MySQL服务器也会将其中一个参数中的NULL值视为NULL。
HTTP参数作为字符串传输。如果没有为输入控件给出值,则键/值对的值将为空字符串(!= NULL)。但是你的脚本中仍然可以有if(emptystring) use NULL之类的东西。

e.g。

<?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',
)

答案 1 :(得分:0)

我建议你使用PDO,而不是mysql(),但这会给你一个想法:

$id = $_POST['id'];

if($id==''){
   $id='NULL';
}
else{
   $id = mysql_real_escape_string($id);
}

$qr = 'Update table SET id='.$id;
mysql_query($qr);