2016-08-13 45 views
-1

將我所有的PHP轉換爲PDO。有一個發送contractor_id和passwd的表單。然後搜索數據庫,如果發現它顯示該記錄中的選定字段。應該是非常簡單的,但無論是我錯過了什麼,或者我有一個類型 - 我不能看到。預先感謝您的幫助。PDO SELECT * if id and password then DISPLAY record

<html > 
<body> 
<form action="display.php" method="POST" > 
<input name="contractor_id" type="text" /> 
<input name="passwd" type="text" /> 
<input name="submit" type="submit" value="Submit" /> 
</form> 
</body> 
</html> 



<?php 
$servername = "localhost"; 
$username = "searchdb"; 
$password = "passwd"; 
$dbname = "dbn"; 


try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt = $conn->prepare("SELECT contractor_id, firstname, lastname, address, city, state, zip, email, areacode, phonenumber, ssnumber, 
    rate, mykey, passwd FROM contractor_keys"); 
    $stmt->execute(); 


    $stmt = $conn->prepare("SELECT * FROM contractor_keys WHERE contractor_id=:contractor_id and passwd=:passwd"); 
    $stmt->bindValue(1, $contractor_id, PDO::PARAM_INT); 
    $stmt->bindValue(2, $firstname, PDO::PARAM_STR); 
    $stmt->bindValue(3, $lastname, PDO::PARAM_STR); 
    $stmt->bindValue(4, $address, PDO::PARAM_STR); 
    $stmt->bindValue(5, $city, PDO::PARAM_STR); 
    $stmt->bindValue(6, $state, PDO::PARAM_STR); 
    $stmt->bindValue(7, $zip, PDO::PARAM_STR); 
    $stmt->bindValue(8, $email, PDO::PARAM_STR); 
    $stmt->bindValue(9, $areacode, PDO::PARAM_STR); 
    $stmt->bindValue(10, $phonenumber, PDO::PARAM_STR); 
    $stmt->bindValue(11, $ssnumber, PDO::PARAM_STR); 
    $stmt->bindValue(12, $rate, PDO::PARAM_STR); 
    $stmt->bindValue(13, $mykey, PDO::PARAM_STR); 
    $stmt->bindValue(14, $passwd, PDO::PARAM_STR); 
    $stmt->execute(); 

    $row = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    echo $row['firstname'].' '.$row['lastname'].' '.$row['address'] .' '.$row['city'].' '.$row['state'] 
    .' '.$row['zip'].' '.$row['areacode'].' '.$row['phonenumber'].' '.$row['ssnumber'].' '.$row['rate'] 
    .' '.$row['mykey'].' '.$row['passwd']; 



catch(PDOException $e) { 
echo "Error: " . $e->getMessage(); 
} 
$conn = null; 

?> 
+0

你的問題是什麼? –

+0

你有兩個佔位符,':contractor_id'和':passwd' - 但是你綁定了14個值?我不認爲你明白['bindValue();'](http://php.net/manual/en/pdostatement.bindvalue.php)是什麼? – Qirel

+0

對不起,我把那部分拿出來了。當我運行它時,我只是得到一個沒有結果的白色屏幕,沒有錯誤 –

回答

0

你可以用第一個查詢做掉乾脆做更多的事情是這樣的:

<?php 

    $servername = "localhost"; 
    $username = "searchdb"; 
    $password = "passwd"; 
    $dbname = "dbn"; 


    try { 

     $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


     $params=array(
      ':contractor_id' => $_POST['contractor_id'], 
      ':passwd'   => $_POST['passwd'] 
     ); 

     $stmt = $conn->prepare("SELECT * FROM contractor_keys WHERE contractor_id=:contractor_id and passwd=:passwd"); 
     $stmt->execute($params); 

     $row = $stmt->fetchAll(PDO::FETCH_ASSOC); 
     echo $row['firstname'].' '.$row['lastname'].' '.$row['address'] .' '.$row['city'].' '.$row['state'] 
     .' '.$row['zip'].' '.$row['areacode'].' '.$row['phonenumber'].' '.$row['ssnumber'].' '.$row['rate'] 
     .' '.$row['mykey'].' '.$row['passwd']; 
     /* 
      or perhaps even 
      echo implode(' ', $row); 
     */ 



    catch(PDOException $e) { 
     echo "Error: " . $e->getMessage(); 
    } 
    $conn = null; 

?> 

作爲一個例子,是專爲DB的一個,下面我有我的本地機器,但它工作正常,並緊密地遵循上面的代碼。

$dsn = 'mysql:dbname=stores;host=127.0.0.1'; 
    $user = 'xxx'; 
    $password = 'xxx'; 

    try { 

     $customer='Alease.Gunderman'; /* static instead of POST var for testing */ 

     $db = new PDO($dsn, $user, $password); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $sql='select * from customers where cust_name=:cust_name;'; 
     $stmt=$db->prepare($sql); 
     $stmt->execute(
      array(
       ':cust_name' => $customer 
      ) 
     ); 
     $row = $stmt->fetchAll(PDO::FETCH_ASSOC); 
     echo '<pre>',print_r($row,true),'</pre>'; 

    } catch (PDOException $e) { 
     echo 'Connection failed: ' . $e->getMessage(); 
    } 

輸出:

Array 
(
    [0] => Array 
     (
      [id] => 6 
      [cust_name] => Alease.Gunderman 
     ) 

) 

這很可能是,如果你是unale與原來的代碼運行一個簡單的測試,例如,該代碼在其他地方也許 - 也許包含的文件?

+0

仍然沒有什麼,然後錯誤日誌 –

+0

我也驗證了我的數據庫正在工作。下面顯示整個表格:try { $ conn = new PDO(「mysql:host = $ servername; dbname = $ dbname」,$ username,$ password); $ conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION); $ stmt = $ conn-> prepare(「SELECT contractor_id,firstname,lastname,address,city,state,zip,email,areacode,phonenumber,ssnumber, rate,mykey FROM contractor_keys」); $ stmt-> execute(); ($ row = $ stmt-> fetch(PDO :: FETCH_ASSOC)){ echo「」; foreach($ row as $ value){ echo「​​{$ value}&nbsp&nbsp&nbsp」; –

+0

嘗試以上所有,仍然卡住。獲得沒有錯誤的白色屏幕,也沒有錯誤日誌。只需要輸入一個ID和一個密碼,並讓它顯示我的數據庫中的記錄。對於職業選手應該很容易,但我是初學者。我在沒有PDO的情況下工作,但需要轉換。 –