是否存在与mysqli语法$stmt->;等效的PDO;bind_param()


Is there a PDO equivalent to the mysqli syntax $stmt->bind_param()?

编辑代码
我在一个工作查询中有一行mysqli代码:$stmt->bind_param("ss", $_POST['skills'], $_POST['city']);

我发现需要更改为PDO,并使用了:
$stmt->bindValue(':skill', $skills, PDO::PARAM_STR); $stmt->bindValue(':city', $city, PDO::PARAM_STR);

我没有得到任何结果,除了回复的"找不到结果。你输入了城市吗?",也没有错误消息,尽管有到数据库的连接,正如加载"城市"选择列表的搜索表单中所证明的那样。完整查询:

  try {
     global $pdo;
    if(isset($_POST['search'])) {
     $skills = htmlspecialchars($_POST['skills']);
     $city = htmlspecialchars($_POST['city']);
$stmt = $pdo->prepare('SELECT skill.skill_name, team.city FROM skill JOIN team ON skill.skill_id=team.skill WHERE skill.skill_name LIKE :skills AND team.city LIKE :city');
     $skills = "%".$skills."%";
     $city = "%".$city."%";
$stmt->bindParam(':skills', $skills, PDO::PARAM_STR);
$stmt->bindParam(':city', $city, PDO::PARAM_STR);
$stmt->execute();
if ($stmt->rowCount() > 0){
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
  foreach ($rows as $row) {
  echo $row['skill'] . " is available in " . $row['city'];
    }
}
else {
echo "No result found. Did you enter a city?";
    }
    }
    }//try
catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}


谢谢。

如果您确实需要使用LIKE,那么您需要在字符串中的某个位置使用通配符。作为占位符,必须表示完整的数据文字,如果要使用LIKE,则必须创建包含通配符的参数,如下所示。

try {
    global $pdo;
    if(isset($_POST['search'])) {
        $skills = '%' . htmlspecialchars($_POST['skills']) . '%';
        $city = '%' . htmlspecialchars($_POST['city']) . '%';
        $stmt = $pdo->prepare('SELECT skill.skill_name, team.city 
                               FROM skill 
                                 JOIN team ON skill.skill_id=team.skill 
                               WHERE skill.skill_name LIKE :skill 
                                 AND team.city LIKE :city');
        $stmt->bindValue(':skill', $skills, PDO::PARAM_STR);
        $stmt->bindValue(':city', $city, PDO::PARAM_STR);
        $stmt->execute();
        if ($stmt->rowCount() > 0){
            $rows = $stmt->fetchAll();
            foreach ($rows as $row) {
                echo $row['skill_name'] . " is available in " . $row['city'];
            }
        }else{
            echo "No result found. Did you enter a city?";
        }
    }
}
catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}

ML的一个小编辑:将$row['skill']更正为$row[[skill_name]