簡體   English   中英

SQLSTATE [HY000]:PHP和PDO的一般錯誤

[英]SQLSTATE[HY000]: General error with PHP and PDO

我有一個小的登錄腳本。

function login($sql) {
try {                   
    $fbhost = "localhost";
    $fbname = "foodbank";
    $fbusername = "root";
    $fbpassword = "";
    $DBH = new PDO("mysql:host=$fbhost;dbname=$fbname",$fbusername,$fbpassword);
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $STH = $DBH->query($sql);       
    $STH->setFetchMode(PDO::FETCH_ASSOC);

    session_start();        
    if ($row = $STH->fetch()) {
        $_SESSION['username'] = "$row[username]";
        header("Location:index.php");   
    }
} catch(PDOException $e) {
    echo $e->getMessage();
}
}

編輯:

index.php

$sql = "SELECT username from users where username = ". $_POST['username'] ." AND password = ". $_POST['password'] ."";
login($sql);

以上從插入更改為選擇查詢。 現在我得到新的錯誤: SQLSTATE [42S22]:找不到列:1054“ where子句”中的未知列“ pvtpyro”

根據您的最新編輯:執行INSERT查詢后,無法使用PDO獲取結果。 看到這里: http : //www.php.net/manual/en/pdostatement.fetch.php#105682

編輯:我想,由於該函數的名稱為“ login”,因此您希望擁有類似$ sql的內容:“從用戶所在的用戶名=:username中選擇用戶的密碼”,然后使用while循環遍歷結果,然后登錄用戶密碼是否匹配?

Edit2:根據您的編輯以提供SELECT查詢: 請勿使用此查詢。 您在做什么不是SQL注入證明。 永遠不要使用用戶輸入中的變量(即$ _POST,$ _ GET等)並將其未經過濾地放入SQL查詢中。 請在SO或Google查找術語“准備好的聲明”。 如您所見,由於您忘記了在雙引號前后加上單點(撇號),因此MySQL認為您的輸入引用的是另一列(“ pvtpyro”),而不是將該列中的值與字符串進行比較。 始終使用“:username”,“:password”語法(帶冒號的語法),否則查詢將是不安全的,並且對您的應用程序極為危險。

PDO的構造函數使用2個在您提供的代碼中未定義的變量-$ fbhost和$ fbname。

編輯:
您正在while循環內調用session_start() ,這可能會導致錯誤。 將其帶出循環。

編輯2:
您應該真正調試代碼。 通過將die放置在代碼的不同部分中,或者在使用之前,輸出一些有用的信息(這是較不推薦的方式),或者使用xdebug和IDE,這將允許您逐行運行,並查看每一個的確切狀態變量等。

如果我沒正確理解的話, $data $STH->execute($data); STH- $STH->execute($data); 應該是一個數組,即使value是1。 因此,您可以嘗試用$STH->execute(array($data));替換該查詢$STH->execute(array($data));

編輯:

將行更改為此:

$data = array($_POST["username"], $_POST["password"]);
$sql = "INSERT INTO users (username, password) value (?, ?)";


$STH = $DBH->prepare($sql);
$STH->execute($data);

在我看來,您沒有正確連接到數據庫...今天早些時候出現此錯誤,原因就是如此。 或者是您的字符串不正確

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM