mysql插入查询的优化代码

时间:2014-01-13 12:49:20

标签: php mysql

您好我正在编写一个用于在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块的数量。

3 个答案:

答案 0 :(得分:2)

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;

正如用户1281385在评论中指出的那样,您直接在查询中使用过帐值。您需要确保对它们进行消毒,或者更好地使用预先准备好的声明。

答案 1 :(得分:1)

或许这样的事情:

$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']);

答案 2 :(得分:0)

此处的示例/测试代码http://codepad.org/5ybUcmcN

$mobileno1 = getMobileNo($_POST['mobileno_1']);
$mobileno2 = getMobileNo($_POST['mobileno_2']);
$mobileno3 = getMobileNo($_POST['mobileno_3']);

/* example 
$mobileno1 = getMobileNo('abc');
$mobileno2 = getMobileNo('111');
$mobileno3 = getMobileNo('');
*/

 $sql = "INSERT INTO refferencemobile(mobileno, mobile1, mobile2, mobile3) VALUES($mobileno, $mobileno1, $mobileno2, $mobileno3)";

function getMobileNo($mobileNo){

   // check for if its set or not OR empty OR not an integer
   if(!isset($mobileNo) || empty($mobileNo) || !is_int($mobileNo)){
      return 0;
   }   

   return $mobileNo; // valid number 
}