我正在尝试迁移到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中指定不同的变量类型和数字变量,这就是我被困住的地方。