非静态方法PDO :: quote()不能静态调用,

时间:2016-09-02 17:48:43

标签: php mysql pdo passwords

Error i get from WAMP

$username = $_POST['username']; 
$password = $_POST['password'];


 $db = new PDO('mysql:host='.$DB_HOST.';dbname='.$DB_DATABASE.'', ''.$DB_USER.'', ''.$DB_PASSWORD.'');

$query = $db->query("SELECT * FROM login_details WHERE username=:username AND password=:password");
$query->bindValue(':username', $username, PDO::PARAM_STR);
$query->bindValue(':password', $password, PDO::PARAM_STR);
$query->execute();
$row_count = $query->rowCount();

尝试从数据库中执行简单的用户名和PW检查。 我超越了沮丧的程度......

3 个答案:

答案 0 :(得分:2)

请改用prepare。

$username = $_POST['username']; 
$password = $_POST['password'];

$db = new PDO('mysql:host='.$DB_HOST.';dbname='.$DB_DATABASE.'', ''.$DB_USER.'', ''.$DB_PASSWORD.'');

$query = "SELECT * FROM login_details WHERE username=:username AND password=:password";
$statement = $db->prepare($query);
$statement->bindValue(':username', $username, PDO::PARAM_STR);
$statement->bindValue(':password', $password, PDO::PARAM_STR);


$statement->execute();
$row_count = $statement->rowCount();

echo $row_count;

更多信息here

答案 1 :(得分:1)

使用以下代码查看...

$stmt = $db->prepare("SELECT * FROM login WHERE username=:username AND password=:password");
    $stmt->bindValue(":username", $username, PDO::PARAM_STR);
    $stmt->bindValue(":password", $password, PDO::PARAM_STR);
    $stmt->execute();
通过$ db-> prepare(“sql”)支持pdo $ stmt

而不是查询。然后,您可以将params绑定到预准备语句并执行它。

答案 2 :(得分:0)

由于这是第一个结果,如果您Google标题中的错误,这里是解决PDO::quote()问题的方法。

如果您正在运行PDO实例/连接,只需连接即可。

//PDO::quote();
$pdo->quote();

如果您正在使用数据库,则应将连接设置在文件的顶部,因此这不成问题。

如果在没有PDO连接的情况下需要类似的功能,则可以使用以下功能。

function escape($value) {
    $search =  ["\\",   "\x00", "\n",  "\r",  "'",  '"', "\x1a"];
    $replace = ["\\\\", "\\0",  "\\n", "\\r", "\'", '\"', "\\Z"];

    return str_replace($search, $replace, $value);
} 

或者,您可以使用类似这样的方法,但是根据情况,您需要使用htmlspecialchars_decode()来撤消操作:

function escape($value) {
    return strip_tags(htmlspecialchars($value));
}

或者将两者混搭。尽管由于重叠可能会产生一些意外的结果。