2012-04-01 7 views
1

私はUsersというMySQLテーブルを持っています。行は4つのフィールドを持っており、次のようになります。私は、ユーザー(テスト名)の名前を持っているテーブルから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] 

とユニークなユーザーIDを取得したい(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()を1つの行が必要なときに単独で、または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

関連する問題