“0”(作为字符串)被评估为空,但 != “”。作为整数,两者的计算结果相同。
解决方案:其中一个参数没有被绑定,因为它是 0(非字符串)并且没有通过检查。正如 Ghost 所指出的,这与它在函数中无关。此外,我应该使用 isset() 而不是 empty()。
这是我的测试:
$test = empty($testbuffer);
console_log($test, "Test result 1a: ");
$test = ($testbuffer == "");
console_log($test, "Test result 1b: ");
$test = ($testbuffer == 0);
console_log($test, "Test result 1c: ");
$test = ($testbuffer === 0);
console_log($test, "Test result 1d: ");
$test = ($testbuffer == "0");
console_log($test, "Test result 1e: ");
$test = ($testbuffer === "0");
console_log($test, "Test result 1f: ");
$testbuffer = "";
$test = empty($testbuffer);
console_log($test, "Test result 2a: ");
$test = ($testbuffer == "");
console_log($test, "Test result 2b: ");
$test = ($testbuffer == 0);
console_log($test, "Test result 2c: ");
$test = ($testbuffer === 0);
console_log($test, "Test result 2d: ");
$test = ($testbuffer == "0");
console_log($test, "Test result 2e: ");
$test = ($testbuffer === "0");
console_log($test, "Test result 2f: ");
$testbuffer = "0";
$test = empty($testbuffer);
console_log($test, "Test result 3a: ");
$test = ($testbuffer == "");
console_log($test, "Test result 3b: ");
$test = ($testbuffer == 0);
console_log($test, "Test result 3c: ");
$test = ($testbuffer === 0);
console_log($test, "Test result 3d: ");
$test = ($testbuffer == "0");
console_log($test, "Test result 3e: ");
$test = ($testbuffer === "0");
console_log($test, "Test result 3f: ");
$testbuffer = "1";
$test = empty($testbuffer);
console_log($test, "Test result 4a: ");
$test = ($testbuffer == "");
console_log($test, "Test result 4b: ");
$test = ($testbuffer == 0);
console_log($test, "Test result 4c: ");
$test = ($testbuffer === 0);
console_log($test, "Test result 4d: ");
$test = ($testbuffer == "0");
console_log($test, "Test result 4e: ");
$test = ($testbuffer === "0");
console_log($test, "Test result 4f: ");
$testbuffer = 0;
$test = empty($testbuffer);
console_log($test, "Test result 5a: ");
$test = ($testbuffer == "");
console_log($test, "Test result 5b: ");
$test = ($testbuffer == 0);
console_log($test, "Test result 5c: ");
$test = ($testbuffer === 0);
console_log($test, "Test result 5d: ");
$test = ($testbuffer == "0");
console_log($test, "Test result 5e: ");
$test = ($testbuffer === "0");
console_log($test, "Test result 5f: ");
$testbuffer = 1;
$test = empty($testbuffer);
console_log($test, "Test result 6a: ");
$test = ($testbuffer == "");
console_log($test, "Test result 6b: ");
$test = ($testbuffer == 0);
console_log($test, "Test result 6c: ");
$test = ($testbuffer === 0);
console_log($test, "Test result 6d: ");
$test = ($testbuffer == "0");
console_log($test, "Test result 6e: ");
$test = ($testbuffer === "0");
console_log($test, "Test result 6f: ");
输出:
//Test 1: (variable not set)
Test result 1a: 1 //empty()
Test result 1b: 1 //== ""
Test result 1c: 1 //== 0
Test result 1d: //=== 0
Test result 1e: //== "0"
Test result 1f: //=== "0"
//Test 2: ""
Test result 2a: 1
Test result 2b: 1
Test result 2c: 1
Test result 2d:
Test result 2e:
Test result 2f:
//Test 3: "0"
Test result 3a: 1
Test result 3b:
Test result 3c: 1
Test result 3d:
Test result 3e: 1
Test result 3f: 1
//Test 4: "1"
Test result 4a:
Test result 4b:
Test result 4c:
Test result 4d:
Test result 4e:
Test result 4f:
//Test 5: 0
Test result 5a: 1
Test result 5b: 1
Test result 5c: 1
Test result 5d: 1
Test result 5e: 1
Test result 5f:
//Test 6: 1
Test result 6a:
Test result 6b:
Test result 6c:
Test result 6d:
Test result 6e:
Test result 6f:
我将功能更改为以下内容:
function SQLBindParam(&$stmt, &$variable, $paramname, $bStringInput = false, $bSkipCheck = false)
{
if(!isset($variable))
{
return;
}
else if(!$bSkipCheck)
{
if($variable == "")
{
return;
}
}
if($bStringInput == true)
{
$stmt->bindValue(':'.$paramname, '%'.$variable.'%', PDO::PARAM_STR);
}
else
{
$stmt->bindValue(':'.$paramname, $variable, PDO::PARAM_INT);
}
return;
}
并在最后一个上编辑了它的调用:
SQLBindParam($stmt, $start_from, "startpgnum", false, true);