2016-07-20 33 views
0

編輯代碼
我在工作查詢中有一個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(); 
} 


感謝。

+1

如有疑問RT .M [PHP PDO手冊(HTTP:// PHP .net/manual/en/pdostatement.bindparam.php)相當奇怪的是' - > bindParam' ___Cryptic what___ – RiggsFolly

+0

' - > bindValue()'用於在查詢運行後獲得結果集的列OUT – RiggsFolly

+0

@ RiggsFolly當我使用' - > bindParam'時,我得到「警告:PDOStatement :: execute():SQLSTATE [HY093]:無效的參數號:參數沒有在C:\ wamp \ www中定義...」 看來使用加入列的「名稱」(如「skill.skill_name」)不起作用。我所做的大部分工作都來自手冊和其他問題/答案。 –

回答

1

如果你真的需要使用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:更正$行[ '技能']到$行[ 'skill_name']

+0

謝謝@RiggsFolly。佔位符是解決方案的重要組成部分。 PDO和MYSQLI的查詢之間似乎也有一些細微的差別。儘管我可以使用mysqli查詢中的index(skill_id)將skill.skill_id與team.skill結合起來,但我只有在將skill.skill_name加入到team.skill和PDO中時纔得到結果。 P.S.也就是說,它可能也是我在本週更新WAMP之前以及查詢工作之前的MySQL版本。我使用mysqli中的舊版本在數據庫上運行了一個原始查詢,並且它恢復爲空。也許是一個奇怪的事故,它的工作。 –

相關問題