2013-01-21 40 views
1

搜索劇本我已經花了相當多的時間來研究如何做到這一點,但只是無法得到它的工作:(使用PHP創建PDO

我有一個簡單的「聯繫人」 MySQL數據庫設置與包含幾個記錄表(idfirst_namelast_nameemail)。

我想允許用戶選擇自己的搜索字詞,即搜索「first_name」列特定的名稱,或搜索「last_name」列等

我有一個簡單的HTML表單,s將用戶數據結尾到腳本。

無論如何,我的PHP腳本如下所示。當我運行PHP腳本時,我沒有收到任何錯誤......只是我沒有得到任何東西......沒有任何反應。

我將不勝感激任何幫助,您可以提供。

<?php 
try{ 
    $conn = new PDO('mysql:host=localhost; dbname=mydbname', 'user', 'pass'); 

}catch (PDOException $e){ 
    echo "Cannot connect to database"; 
    exit; 
} 

    $sql = 'SELECT first_name, last_name, email FROM mycontacts WHERE :searchtype LIKE :searchterm'; 
    $searchtype = '%'. $_POST['searchtype'] .'%'; 
    $searchterm = '%'. $_POST['searchterm'] .'%'; 
    $stmt = $conn->prepare($sql); 
    $stmt->bindParam(':searchtype', $searchtype, PDO::PARAM_STR); 
    $stmt->bindParam(':searchterm', $searchterm, PDO::PARAM_STR); 
    $stmt->bindColumn(1, $first_name); 
    $stmt->bindColumn(2, $last_name); 
    $stmt->bindColumn(3, $email); 

    $stmt->execute(); 
    $numRows = $stmt->rowCount(); 

    echo "<p>Number of rows:".$numRows."</p>"; 

    if (isset($numRows)) { ?> 
    <table> 
    <tr> 
    <th scope="col">First Name</th> 
    <th scope="col">Last Name</th> 
    <th scope="col">Email</th> 
    </tr> 
    <?php while ($stmt->fetch()) { ?> 
    <tr> 
    <td><?php echo $first_name; ?></td> 
    <td><?php echo $last_name; ?></td> 
    <td><?php echo $email; ?></td> 
    </tr> 
    <?php } ?> 
    </table> 
    <?php } ?> 

回答

3

你需要實現一個白名單從允許領域挑選。
還要注意,搜索必須使用GET方法來實現,而不是POST

$terms = array("last_name","first_name","etc"); 
if (in_array($_GET['searchtype'], $terms) { 
    $field = $_GET['searchtype']; 
} 
$sql = "SELECT * FROM mycontacts WHERE `$field` LIKE :searchterm"; 
+0

嗨你的常識,非常感謝!我已經實施了你的建議,它的工作原理,不用擔心。非常感謝您的幫助。請注意,我不記得我最近檢查過的任何來源中提及過您的方法。你必須寫一本書! (不幸的是我不能投票你的答案,我的名聲還是太低了,抱歉)。 – Nick