2016-07-14 202 views
0

所以我有一个非常简单的函数,它可以针对具有其他凭证的用户的MySQL数据库运行。我已经写了几个其他功能,按照预期运行类似的查询。但是,目前每次我运行一个查询对我的数据库我得到空结果。我已经采取了查询本身,并直接运行它(phpmyadmin),并能够检索所需的结果。为什么我会得到空结果?

function getName($user){ 
    $con = mysqli_connect('localhost','*****','*****','*****'); 
    if(mysqli_connect_error()){ 
     echo 'Failed to Connect: '. mysqli_connect_error(); 
     die(); 
    } 
    $stmt = $con->prepare('SELECT firstName,lastName FROM users WHERE user=? LIMIT 1'); 
    $stmt->bind_param('s',$user); 
    $stmt->execute(); 
    $stmt -> bind_result($fname,$lname); 


    $stmt->fetch(); 

    $lArr = str_split($lname); 
    $canName = $fname . ' ' . $lArr[0].'.'; 
    return $canName; 
} 

我试过了,没有限制,以防万一。 var_dump总是显示为空。有谁知道为什么会发生?

+1

问显而易见的,你有没有尝试运行对你的MySQL实例的原始查询,你得到任何记录回来? –

+0

是的,我有,是的,我得到了我正在寻找的结果。 – Hans

+1

您忘记了' - >从结果集中获取()'任何结果,只是将它们绑定到变量是不够的 – RiggsFolly

回答

1

你忘了->fetch()从结果集的任何结果,只需将它们绑定变量是不够的

function getName($user){ 
    $con = mysqli_connect('localhost','*****','*****','*****'); 
    if(mysqli_connect_error()){ 
     echo 'Failed to Connect: '. mysqli_connect_error(); 
     die(); 
    } 
    $stmt = $con->prepare('SELECT firstName,lastName FROM users WHERE user=? LIMIT 1'); 
    $stmt->bind_param('s',$user); 
    $stmt->execute(); 
    $stmt -> bind_result($fname,$lname); 

    // now fetch data into the bound variables 
    $stmt->fetch(); 

    $lArr = str_split($lname); 
    $canName = $fname . ' ' . $lArr[0].'.'; 
    return $canName; 
} 
+0

所以我标记fetch()作为答案。然而,虽然我发现我确实需要使用fetch(),但我还发现我不得不使用双引号而不是单引号。如果提取仍然为空,并且双引号能够返回我所需要的内容。一如既往,感谢大家的帮助。 – Hans

+0

双引号需要在哪里? – RiggsFolly

+0

哦,你没有把这个标记为答案?但是没关系 – RiggsFolly

-1

执行查询,但你不拾取结果(如RiggsFolly说的话)。你喊使用取使用fetchall的()()

http://php.net/manual/en/pdostatement.fetchall.php http://php.net/manual/en/pdostatement.fetch.php

+0

对不起米沙,但这不是一个答案**它的评论,还有一个已经发布,已发布的答案。你几乎有足够的代表发表评论,所以不要冒险让选票无法回答问题 – RiggsFolly

+0

另外,他正在使用'mysqli_',因此链接到PDO方法并不是非常有用! – RiggsFolly

相关问题