2013-10-22 35 views
0

在经过几小时的各种脚本示例并试用几乎所有的东西之后,我发现在寻找答案时这是远程可以理解的,我再一次处于更智能的摆布之中。我想要做的就是从用户的数据库表中返回一个名称。这太难了,对我来说似乎是YEP。有人请直接给我。 我已经排序了所有的错误,现在我什么都没有了,我想呢,问题是在返回结果语句中。这里是我的代码:不能从预准备声明中返回结果

<?php 
//connect to database 
$mysqli = new mysqli('localhost', 'fiona', 'imB04', 'Org_db'); 

// check connection 
    if (mysqli_connect_errno()) { 
     echo "Connect failed: " . mysqli_connect_errno(); exit(); 
    } 

//Prepared statement, bind and execute 
    if (!$stmt = $mysqli->prepare("SELECT `name` FROM users WHERE name = ?")) { 
    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; 
} 
//bind parametres 
if (!$stmt->bind_param("i", $name)) { 
    echo "Binding param failed: (" . $stmt->errno . ") " . $stmt->error; 
//execute query or return error 
} 
if (!$stmt->execute()) { 
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; 
} 
//bind result variable 
if (!$stmt->bind_result($name)) { 
    echo "bind result failed: (" . $stmt->errno . ") " . $stmt->error; 
} 
    if ($result = $mysqli->prepare("SELECT `name` FROM users WHERE name = ?")) { 
while ($row = $result->fetch_array()) 
{ 
echo $result['name']; 
} 
    } 

//Close statement 
     $stmt -> close(); 
//Close connection 
    $mysqli -> close(); 

?> 
+0

嗯,你为什么不摆脱这个混乱,并尝试从非常**手册页* *清洁*例如** –

+0

我使用手册的例子是名称=(NULL)显然我只是不能正确地得到它 – user2042111

+0

无论如何,你需要尝试手动的例子。仅仅因为你目前的表现非常不一致。为什么你运行查询*两次*? –

回答

-1

试试这个代码,但我认为你已经在你的错误检查的顶部。我可以添加一个其他选项来检查失败。将$ db更改为您的数据库被调用的任何地方。

$query = "SELECT `name` FROM `users` WHERE `name`=?"; 
    $stmt = $db->prepare($query); 
    $stmt->bind_param('s',$name); 
    $stmt->execute(); 
    $stmt->bind_result($name); 

    if($stmt->fetch()) 
    { 
     echo $name; 
    } 
    $stmt->close(); 

而且用于搜索的名字,我会用这个

<snip> 
"WHERE CONCAT(`firstname`, ' ',`lastname`) LIKE CONCAT('%', ?, '%')"; 
$stmt->bind_param('s',$name); 
<snip> 

这是寻找一个姓氏和名字的例子。如果你使用concat,那么他们是否只有名字的一部分或者是否有名字或姓氏并不重要。