在Mysqli中实现可扩展的搜索查询

时间:2017-03-04 04:56:11

标签: php mysql string post mysqli

我正在尝试迁移到Mysqli,我得到了我的Mysql代码来搜索这样的参数:

$querySt = "SELECT userID FROM myTable";
if (isset($_POST["UserID"])) {
    if (ctype_digit($_POST["UserID"])) {
        addWhereIfNoHave();
        $in_userID = mysql_real_escape_string($_POST["UserID"]);
        $querySt .= " UserID = '$in_userID'";
    }
}

if (isset($_POST["name"])) {
    addWhereIfNoHave();
    $in_name = mysql_real_escape_string($_POST["name"]);    
    $querySt .= " imgName LIKE LOWER('%$in_name%')";
}

if (isset($_POST["ScoreLessThan"])) {
    if (ctype_digit($_POST["ScoreLessThan"])) {
        addWhereIfNoHave();
        $in_ScoreLessThan = mysql_real_escape_string($_POST["ScoreLessThan"]);
        $querySt .= " Score < '$in_ScoreLessThan'";
    }           
}

...
...
there are other if statements here looking for other post data, and 
they keep on adding parameters into mysql query string just like above.
...
...

//this function is called in those if statements above. It either adds "WHERE" or "AND".
function addWhereIfNoHave(){
    global $querySt;
    if (strpos($querySt, 'WHERE') !== false){
        $querySt .= " OR";  
        return true;
    }else{
        $querySt .= " WHERE";
        return false;
    }
}

此函数可以正常查找从PHP post输入的所有参数。但是,我正在将其迁移到Mysqli,我在将此代码转换为Mysqli版本时遇到了一些麻烦。例如,

$stmt = $conn->prepare("SELECT userID FROM myTable WHERE UserID = ? AND name= ?");
$stmt->bind_param('ss', $userid, $name);

假设,我想使用2个变量搜索表,我绑定了上面的2个变量,但是对于我上面的Mysql,我继续在执行mysql查询之前将其他参数扩展到字符串中。

但是对于Mysqli,我们怎么能这样做?是否可以bind附加参数并扩展prepare语句的字符串,如上面的Mysql代码?如何解决Mysqli问题?

我目前的问题主要是使用bind_param。我可以进一步连接搜索查询并添加所有'?'在prepare语句中,但是需要在bind_param中指定不同的变量类型和数字变量,这就是我被困住的地方。

0 个答案:

没有答案
相关问题