2012-04-01 55 views
1

我有一个MySQL表称为用户。行有4个字段,如下所示:从表其中name选择ID =? ...查询失败

INT(10) | serialized php array | CHAR(24) | CHAR(254) 
    id  | profile    | name  | email 
    1  | ..ybl4JFtmhQEQVwQOXjo... | TestName | [email protected] 
    2  | ..hd+F2yZVYPlxmyalrQo... | NameTest | [email protected] 

我有一个用户(TestName)的名称并希望获得唯一的用户标识(1)。 为什么下面的代码无法正常工作?

function dataBase() { 
    $dataBase = @new MySQLi("localhost", "name", "password", "databasename"); 
    if (mysqli_connect_errno()) { 
     safeExit("Failed to establish connection to MySQL database, error: ".mysqli_connect_error(), 'msgError'); 
    } else { 
     return $dataBase; 
    } 
} 

// connect to database 
$db = dataBase(); 

$sql = 'SELECT 
      id 
     FROM 
      Users 
     WHERE 
      name = ? 
     LIMIT 
      1'; 
$stmt = $db->prepare($sql); 
if (!$stmt) { 
    safeExit($db->error, 'msgError'); 
} 

$name = 'TestName'; 

$stmt->bind_param('s', $name); 
if (!$stmt->execute()) { 
    safeExit($stmt->error, 'msgError'); 
} 
    $stmt->bind_result($uid); 
    $stmt->close(); 
echo $uid; 

该代码输出一个zer0。我可以排除语法错误。查询必须有错误。

回答

0

你还没有从$stmt读取的行。查看该mysqli::bind_result() documentation的例子来了解这通常是用一个呼叫做$stmt->fetch()单独期待一排,或在while循环时。

$stmt->bind_param('s', $name); 
if (!$stmt->execute()) { 
    safeExit($stmt->error, 'msgError'); 
} 

$stmt->bind_result($uid); 

// Fetch the row so it populates the result variable 
$stmt->fetch(); 
echo $uid; 

$stmt->close(); 
+0

感谢。这有帮助。 – u7f1mrfpf 2012-04-01 18:47:41