Php mysql插入查询的优化代码

Php mysql插入查询的优化代码,php,mysql,Php,Mysql,您好,我正在编写一个在MySQL表中插入数据的模块。这很简单,但在我的模块中,我收到了四个手机号码。第一个是用户手机号,另外三个是参考手机号。用户的手机号码是必填字段,但引用不是。这次我使用PHP中的isset()和empty()函数检查每个参考手机号码。 但是我必须写多个if-else块。像 if(isset($_POST['mobileno_1']) && !empty($_POST['mobileno_1'])){ $mobileno1 = $_POST['

您好,我正在编写一个在MySQL表中插入数据的模块。这很简单,但在我的模块中,我收到了四个手机号码。第一个是用户手机号,另外三个是参考手机号。用户的手机号码是必填字段,但引用不是。这次我使用PHP中的
isset()
empty()
函数检查每个参考手机号码。 但是我必须写多个if-else块。像

if(isset($_POST['mobileno_1']) && !empty($_POST['mobileno_1'])){
        $mobileno1 = $_POST['mobileno_1'];
    }else{
        $mobileno1 = 0;
    }
    if(isset($_POST['mobileno_2']) && !empty($_POST['mobileno_2'])){
        $mobileno2 = $_POST['mobileno_2'];
    }else{
        $mobileno2 = 0;
    }
    if(isset($_POST['mobileno_3']) && !empty($_POST['mobileno_3'])){
        $mobileno3 = $_POST['mobileno_3'];
    }else{
        $mobileno3 = 0;
    }
    $sql = "INSERT INTO refferencemobile(mobileno, mobile1, mobile2, mobile3) VALUES($mobileno, $mobileno1, $mobileno2, $mobileno3)";

是否有任何优化的方法可以做到这一点。这样它可以减少if-else块的数量。

类似的内容可能是:

$mobileno3 = (isset($_POST['mobileno_3']) && !empty($_POST['mobileno_3']))
    ? $_POST['mobileno_3']
    : 0;
你甚至可以把它变成一个函数

function GetMobileNo($mobileNo)
{
    return (isset($mobileNo) && !empty($mobileNo)) ? $mobileNo : 0;
}

$mobileno3 = GetMobileNo($_POST['mobileno_3']);

也许是这样的:

$mobileno3 = (isset($_POST['mobileno_3']) && !empty($_POST['mobileno_3']))
    ? $_POST['mobileno_3']
    : 0;
你甚至可以把它变成一个函数

function GetMobileNo($mobileNo)
{
    return (isset($mobileNo) && !empty($mobileNo)) ? $mobileNo : 0;
}

$mobileno3 = GetMobileNo($_POST['mobileno_3']);

也许是这样的:

$mobileno3 = (isset($_POST['mobileno_3']) && !empty($_POST['mobileno_3']))
    ? $_POST['mobileno_3']
    : 0;
你甚至可以把它变成一个函数

function GetMobileNo($mobileNo)
{
    return (isset($mobileNo) && !empty($mobileNo)) ? $mobileNo : 0;
}

$mobileno3 = GetMobileNo($_POST['mobileno_3']);

也许是这样的:

$mobileno3 = (isset($_POST['mobileno_3']) && !empty($_POST['mobileno_3']))
    ? $_POST['mobileno_3']
    : 0;
你甚至可以把它变成一个函数

function GetMobileNo($mobileNo)
{
    return (isset($mobileNo) && !empty($mobileNo)) ? $mobileNo : 0;
}

$mobileno3 = GetMobileNo($_POST['mobileno_3']);

empty
已检查变量是否已设置,因此这简化了if语句

也可以使用三元条件。这些看起来像:

$someCondition ? 'a' : 'b';
如果
$someCondition
为真,则将计算为“a”,否则为“b”

把这些放在一起,我们可以得到:

    //If $_POST['mobileno_1'] isset and has a non false value use $_POST['mobileno_1']
    $mobileno1 = !empty($_POST['mobileno_1']) ? $_POST['mobileno_1'] : 0;
    $mobileno2 = !empty($_POST['mobileno_2']) ? $_POST['mobileno_2'] : 0;
    $mobileno3 = !empty($_POST['mobileno_3']) ? $_POST['mobileno_3'] : 0;

正如user1281385在评论中指出的那样,您正在查询中直接使用已发布的值。你需要确保这些都是经过消毒的,或者更好的是,使用准备好的语句。

empty
已经检查了变量是否已设置,这样可以简化if语句

也可以使用三元条件。这些看起来像:

$someCondition ? 'a' : 'b';
如果
$someCondition
为真,则将计算为“a”,否则为“b”

把这些放在一起,我们可以得到:

    //If $_POST['mobileno_1'] isset and has a non false value use $_POST['mobileno_1']
    $mobileno1 = !empty($_POST['mobileno_1']) ? $_POST['mobileno_1'] : 0;
    $mobileno2 = !empty($_POST['mobileno_2']) ? $_POST['mobileno_2'] : 0;
    $mobileno3 = !empty($_POST['mobileno_3']) ? $_POST['mobileno_3'] : 0;

正如user1281385在评论中指出的那样,您正在查询中直接使用已发布的值。你需要确保这些都是经过消毒的,或者更好的是,使用准备好的语句。

empty
已经检查了变量是否已设置,这样可以简化if语句

也可以使用三元条件。这些看起来像:

$someCondition ? 'a' : 'b';
如果
$someCondition
为真,则将计算为“a”,否则为“b”

把这些放在一起,我们可以得到:

    //If $_POST['mobileno_1'] isset and has a non false value use $_POST['mobileno_1']
    $mobileno1 = !empty($_POST['mobileno_1']) ? $_POST['mobileno_1'] : 0;
    $mobileno2 = !empty($_POST['mobileno_2']) ? $_POST['mobileno_2'] : 0;
    $mobileno3 = !empty($_POST['mobileno_3']) ? $_POST['mobileno_3'] : 0;

正如user1281385在评论中指出的那样,您正在查询中直接使用已发布的值。你需要确保这些都是经过消毒的,或者更好的是,使用准备好的语句。

empty
已经检查了变量是否已设置,这样可以简化if语句

也可以使用三元条件。这些看起来像:

$someCondition ? 'a' : 'b';
如果
$someCondition
为真,则将计算为“a”,否则为“b”

把这些放在一起,我们可以得到:

    //If $_POST['mobileno_1'] isset and has a non false value use $_POST['mobileno_1']
    $mobileno1 = !empty($_POST['mobileno_1']) ? $_POST['mobileno_1'] : 0;
    $mobileno2 = !empty($_POST['mobileno_2']) ? $_POST['mobileno_2'] : 0;
    $mobileno3 = !empty($_POST['mobileno_3']) ? $_POST['mobileno_3'] : 0;
正如user1281385在评论中指出的那样,您正在查询中直接使用已发布的值。您需要确保这些都经过消毒,或者更好的是,使用准备好的语句。

这里是示例/测试代码

这里是示例/测试代码

这里是示例/测试代码

这里是示例/测试代码



+1,但记住也要检查mobileno_1 2和3的安全查询字符串。+1,但记住也要检查mobileno_1 2和3的安全查询字符串。+1,但记住也要检查mobileno_1 2和3的安全查询字符串。+1,但记住也要检查mobileno_1 2和3的安全查询字符串。我会在这里使用ctype_数字,而不是is_int,由于post变量为stringsavoid也是数字的,因为它允许小数点和科学符号。我看,is\u numeric似乎更合适;ctype_digit($integer);//false(ASCII 42是*字符)或者我们可以使用类似的if(filter_var($_POST['mobileNo'],filter_VALIDATE_INT))…我会在这里使用ctype_digit,而不是is_INT,is_INT将始终失败,因为POST vars是stringsavoid也是numeric,因为它允许小数点和科学符号查看,我看是数字似乎更合适。在下面的案例中,ctype数字对$integer=42没有帮助;ctype_digit($integer);//false(ASCII 42是*字符)或者我们可以使用类似的if(filter_var($_POST['mobileNo'],filter_VALIDATE_INT))…我会在这里使用ctype_digit,而不是is_INT,is_INT将始终失败,因为POST vars是stringsavoid也是numeric,因为它允许小数点和科学符号查看,我看是数字似乎更合适。在下面的案例中,ctype数字对$integer=42没有帮助;ctype_digit($integer);//false(ASCII 42是*字符)或者我们可以使用类似的if(filter_var($_POST['mobileNo'],filter_VALIDATE_INT))…我会在这里使用ctype_digit,而不是is_INT,is_INT将始终失败,因为POST vars是stringsavoid也是numeric,因为它允许小数点和科学符号查看,我看是数字似乎更合适。在下面的案例中,ctype数字对$integer=42没有帮助;ctype_digit($integer);//false(ASCII 42是*字符),或者我们可以在以下情况下使用类似的内容(filter\u var($\u POST['mobileNo'],filter\u VALIDATE\u INT))。。。