Php 将NULL追加到字符串,用于MySQL插入查询

Php 将NULL追加到字符串,用于MySQL插入查询,php,mysql,Php,Mysql,我正在尝试向MySQL数据库添加一个新条目,最后5个参数是可选的,所以空值是可能的。根据收到的POST数据,我在向查询字符串追加NULL值时遇到问题。 如何将空值附加到查询字符串? 如果您需要一个空值,例如:在列中使用和自动增量id..,则可以忽略相关值(并且可以避免使用字符串concat,因为“$yourvar”就足够了) 无论如何,传递var时要小心。如果需要一个空值,例如:正在使用和自动增量id,那么可以在列中忽略相关值(并且可以避免字符串concat,因为“$yourvar”就足够了

我正在尝试向MySQL数据库添加一个新条目,最后5个参数是可选的,所以空值是可能的。根据收到的POST数据,我在向查询字符串追加NULL值时遇到问题。

如何将空值附加到查询字符串?


如果您需要一个空值,例如:在列中使用和自动增量id..,则可以忽略相关值(并且可以避免使用字符串concat,因为“$yourvar”就足够了)


无论如何,传递var时要小心。如果需要一个空值,例如:正在使用和自动增量id,那么可以在列中忽略相关值(并且可以避免字符串concat,因为“$yourvar”就足够了)


无论如何,传递var时要小心。您应该对参数化查询求值,而不是传递var以避免sqlinjection。首先,您应该使用准备好的语句-

但是,如果您只是在寻找答案,只需将初始变量设置为字符串
“NULL”

这样,当您对所有内容进行解析时,您将得到一个MySQL可以理解的查询字符串:

$age = 'NULL';
if($_POST["age"] != null) {
    // Wrap each variable in quotes
   $age = "'" . (int)mysqli_real_escape_string($db,$_POST["age"]) . "'";
}
// etc.

$qs_registration="insert into uporabnik (ID, up_ime, geslo, email, ime, priimek, naslov_bivanja, posta_foreign_key,
tel_stevilka, spol, starost) VALUES (NULL, " . $username . "," . $password . "," . $email . "," . $name . ",
" . $surname . "," . $location . "," . $postoffice . "," . $phonenumber . "," . $gender . "," . $age . ")";

注意:我认为这里还有很多其他问题,从没有使用预先准备好的语句(如前所述)到如何首先配置表。但这会解决你手头的问题。

首先,你应该使用事先准备好的声明-

但是,如果您只是在寻找答案,只需将初始变量设置为字符串
“NULL”

这样,当您对所有内容进行解析时,您将得到一个MySQL可以理解的查询字符串:

$age = 'NULL';
if($_POST["age"] != null) {
    // Wrap each variable in quotes
   $age = "'" . (int)mysqli_real_escape_string($db,$_POST["age"]) . "'";
}
// etc.

$qs_registration="insert into uporabnik (ID, up_ime, geslo, email, ime, priimek, naslov_bivanja, posta_foreign_key,
tel_stevilka, spol, starost) VALUES (NULL, " . $username . "," . $password . "," . $email . "," . $name . ",
" . $surname . "," . $location . "," . $postoffice . "," . $phonenumber . "," . $gender . "," . $age . ")";

注意:我认为这里还有很多其他问题,从没有使用预先准备好的语句(如前所述)到如何首先配置表。但是这应该可以解决您手头上的问题。

您可以在MySQL中将默认值设置为
NULL
,然后如果这些值不存在,则在插入时将这些字段省略;动态生成查询。表设计错误,ID字段不应为空,自动递增或在插入中指定值statement@glant如果
ID
是主键,通过自动递增,传递NULL只会使其使用AI,因此,如果设置正确,这可能会起作用。@Qirel这是我的观点…ID是pKey还是仅仅是一列??不确定在这种情况下,我们在这里不知道,但它可以完全有效,因为它可能是一个自动递增的ID-然后它工作;-)您可以在MySQL中将默认值设置为
NULL
,如果这些值不存在,则在插入时将这些字段省略;动态生成查询。表设计错误,ID字段不应为空,自动递增或在插入中指定值statement@glant如果
ID
是主键,通过自动递增,传递NULL只会使其使用AI,因此,如果设置正确,这可能会起作用。@Qirel这是我的观点…ID是pKey还是仅仅是一列??不确定在这种情况下,我们在这里不知道,但它可以完全有效,因为它可能是一个自动递增的ID-然后它工作;-)如果变量是字符串,那么在查询中需要在其周围加单引号,然后将
'NULL'
作为字符串,而不是实际的NULL。由于您的查询在变量周围没有单引号,它将失败。解决方法是执行
$age=$\u POST[“age”]!=无效的“'”(int)mysqli_real_escape_字符串($db,$\u POST[“age”])。“'”:NULL,则只有当有值时才能得到sniglequote(尽管这是一个糟糕的示例,因为这里的年龄是一个整数,不是字符串,而是一个示例);-)如果变量是字符串,那么在查询中需要在其周围加单引号,然后将
'NULL'
作为字符串,而不是实际的NULL。由于您的查询在变量周围没有单引号,它将失败。解决方法是执行
$age=$\u POST[“age”]!=无效的“'”(int)mysqli_real_escape_字符串($db,$\u POST[“age”])。“'”:NULL,则只有当有值时才能得到sniglequote(尽管这是一个糟糕的示例,因为这里的年龄是一个整数,不是字符串,而是一个示例);-)
$age = 'NULL';
if($_POST["age"] != null) {
    // Wrap each variable in quotes
   $age = "'" . (int)mysqli_real_escape_string($db,$_POST["age"]) . "'";
}
// etc.

$qs_registration="insert into uporabnik (ID, up_ime, geslo, email, ime, priimek, naslov_bivanja, posta_foreign_key,
tel_stevilka, spol, starost) VALUES (NULL, " . $username . "," . $password . "," . $email . "," . $name . ",
" . $surname . "," . $location . "," . $postoffice . "," . $phonenumber . "," . $gender . "," . $age . ")";