2014-02-08 45 views
0
<?php 
    header('content-type: text/json'); 

    if(!isset($_POST['username'])) 
     exit; 
    $db = new PDO('mysql:host=ASDFSDF;dbname=QWEQWESAD','SDFSDF','ASAsaD_',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
    $query = $db->prepare('SELECT * FROM mybb_users WHERE username =\''.$_POST['username'].'\''); 
    $query->execute(); 

    echo json_encode(array('exists' => $query->rowCount() > 0)); 
    exit; 
?> 

它返回所有我发送的用户名存在的行,虽然他们实际上不存在。Ajax - SQL - 返回所有行的行

EDIT1:http://pastebin.com/DWb7uZV1 用结合不工作就rowCount时方法

+0

检查是否$ _POST [“用户名”]被传递到PHP,并尝试使用bindValue –

+0

http://pastebin.com/DWb7uZV1 – Yashas

回答

2

手册是相当清楚的。 http://php.net/manual/en/pdostatement.rowcount.php

对于大多数数据库,PDOStatement :: rowCount()不是返回受SELECT语句影响的行数。

所以你想要做的是使用计数查询。

<?php 
    header('content-type: text/json'); 

    if(!isset($_POST['username'])) 
     exit; 

    $db = new PDO('mysql:host=ASDFSDF;dbname=QWEQWESAD','SDFSDF','ASAsaD_',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
    $query = $db->prepare('SELECT count(*) FROM mybb_users WHERE username = ?'); 
    $query->bindParam(1, $_POST['username'], PDO::PARAM_STR); 
    $query->execute(); 

    //echo json_encode(array('exists' => $query->fetchColumn() > 0)); 
    echo json_encode($query->fetchColumn() == 0); 
    exit; 
?> 
+0

你有语法错误编辑之前有人下来票纠正。 –

+0

感谢您的注意,编辑。 –

+0

我认为我们应该在提供任何字符串给查询之前使用'没有它会导致语法错误? – Yashas