PHP - 空白错误警报,没有文本,没有错误日志条目 - PDO fetch()

时间:2016-09-26 05:14:55

标签: php mysql pdo

我希望在mysql中使用'mysql'数据库不会影响任何事情(老实说我不记得是否错误)因为如果是这样我将不得不完全重新做这个网站的mysql部分(我不知道是否为其他东西保留了。我有两件事我想在这里做,1)通过用户名表验证登录信息,2)如果登录信息有效,创建一个列表。我最初在两个PHP文件中有这个,但我试图尽可能简化这个;我看到的用于登录站点的一些示例太复杂了,我只需要一种机制来验证登录详细信息,并创建列表...这不是一个网络站点或任何东西。此外,在我使用它的IDE中提到不要使用$ query两次,但更改它似乎没有什么区别。我不太熟悉PDO :: fetch()的工作方式(或一般的PHP),但这就是我实现它的方式:

<?php 
header('Content-Type: application/json');

error_reporting(E_ALL); 
ini_set('display_errors', 1); 


$uname = filter_input(INPUT_POST, 'uname'); 
$upassword = filter_input(INPUT_POST, 'upassword'); 
$name = filter_input(INPUT_POST, 'name');
$description = filter_input(INPUT_POST, 'description');

$createlisting = '';
$hello = array();


if(!empty($uname && $upassword && $name && $description)) { 

$conn = new PDO('mysql:host=127.0.0.1;dbname=mysql', 'root', "password"); 
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$query = 'SELECT `uname`,`upassword` FROM `usernames` WHERE `uname` = :uname'; 
$stmt = $conn->prepare($query); 
$stmt->bindParam(":uname",$uname, PDO::PARAM_STR, strlen($uname)); 
$stmt->execute();

$hello = $stmt->fetch(PDO::FETCH_ASSOC);
$upasswordhash = password_hash($upassword, PASSWORD_DEFAULT);
$loginarray = array($uname, $upasswordhash);
$loginarray1 = array($hello['uname'], $hello['upassword']);


if ($loginarray === $loginarray1){


        $query = "INSERT INTO user_meta (name, description) VALUES (:name, :description)";
        $stmt = $conn->prepare($query);

        $query->bindParam(":name",$name, PDO::PARAM_STR, strlen($name)); 

        $query->bindParam(":description",$description, PDO::PARAM_STR, strlen($description));
        $query->execute(); 
        echo json_encode("Your listing has been created.  Please use the search function to see it.");

        $conn = null;
        $query = null;
 //closes the MySQL connection.
} else {
echo json_encode("Listing failed.");
}
}

1 个答案:

答案 0 :(得分:-2)

尝试比较数组值而不是使用==运算符。

pdo返回一个关联数组,但你在tryout $ hello数组中使用了数字索引。

从这个问题: https://stackoverflow.com/a/5678990

$arraysAreEqual = ($a == $b); // TRUE if $a and $b have the same key/value pairs.
$arraysAreEqual = ($a === $b); // TRUE if $a and $b have the same key/value pairs in the same order and of the same types.