我会这样做:
$fname = isset($_POST['firstname']) && strlen($_POST['firstname']) > 0 ? $_POST['firstname'] : null;
这样,如果变量已设置且不为空,则 $fname 将被定义为 $_POST['firstname'] 值,否则将为null
顺便说一句,如果您在双引号 ( "
) 内工作,则无需使用点将值添加到 $sql 字符串。更重要的是,你的语法是错误的。这是一种可行的方法:
$sql = "UPDATE profile SET first='$fname', last='$lname' WHERE id='$id'";
您不应该使用这种 SQL 查询生成。它容易受到 SQL 注入的攻击。更好地使用PDO或MySQLi参数化查询。
顺便说一句,如果您想在值为空的情况下拒绝插入,则最好在创建 MySQL 表时执行此操作(not null
为列分配属性)。例如:
CREATE TABLE user(
first VARCHAR(50) NOT NULL,
last VARCHAR(50) NOT NULL
)
** 编辑:如果我理解得很好,这就是你想要的:
$valuesToAdd = "";
// Concatenate values to the query if they are defined
if (isset($_POST['firstname']) && strlen($_POST['firstname']) > 0) $valuesToAdd .= "first = '{$_POST['firstname']}',";
if (isset($_POST['lastname']) && strlen($_POST['lastname']) > 0) $valuesToAdd .= "last = '{$_POST['lastname']}',";
// Repeat for any other values...
// By default, the SQL string is empty
$sql = "";
// If changes were made...
if (strlen($valuesToAdd) > 0) {
// Remove the last ","
$valuesToAdd = substr($valuesToAdd, 0, strlen($valuesToAdd)-1);
// Generate the SQL string with the values which will be added
$sql = "UPDATE profile SET {$valuesToAdd} WHERE id='{$id}'";
// echo $sql; die;
}
// Check if the SQL string is not empty
if (strlen($sql) > 0) {
// Here the SQL has been generated, use it for a SQL query...
// $con = mysql_connect(...); .....
}