2009-08-08 85 views
0

我创造了这个代码:为什么这个准备语句在MYSQLI中不起作用?

$statement = $db->prepare("SELECT * FROM phptech_contact"); 
$statement->execute(); 
$result = $statement->result_metadata(); 
$object = $result->fetch_object(); 

print_r($object); 

当我运行它,它不工作。有人可以告诉我为什么它不起作用吗?

我在这个表中有20行,所以应该返回数据。

+1

的过程没什么区别请定义“不工作“ – Greg 2009-08-08 11:32:21

回答

5

http://ch.php.net/manual/en/mysqli-stmt.result-metadata.php

Note: The result set returned by mysqli_stmt_result_metadata() contains only metadata. It does not contain any row results. The rows are obtained by using the statement handle with mysqli_stmt_fetch().

只要你不需要,你不需要调用此方法这个元数据。

$statement = $db->prepare("SELECT fld1, fld2 FROM phptech_contact"); 
$statement->execute(); 
$stmt->bind_result($fld1, $fld2); 

while ($stmt->fetch()) { 
    echo "$fld1 and $fld2<br />"; 
} 

但我真的不喜欢mysqli扩展。 PDO是凉爽得多...... ;-)

$db = new PDO('...'); 
$stmt = $db->prepare("SELECT fld1, fld2 FROM phptech_contact"); 
$stmt->execute(); 

while ($obj = $stmt->fetchObject()) { 
    // ... 
} 

$objs = stmt->fetchAll(PDO::FETCH_OBJ); 
+0

关闭我让你像”$ fld1“和”$ fld2“我想如果我选择*出。 :) – ParisNakitaKejser 2009-08-08 12:07:46

+0

是的,PDO其很多easyere,我ges我有使用PDO之前我的机器人我该怎么尝试mysqli机器人现在我可以为我maby不想去MySQLi机器人去PDO。 :)坦克很多的帮助。 – ParisNakitaKejser 2009-08-08 12:11:46

+0

PDO是两者中最现代的。现在通常没有理由使用其他任何东西。 – Nate 2009-08-08 13:41:26

3

,如果你想从数据库中获取的行,你需要的功能mysqli_stmt::fetch(),不mysqli_stmt::fetch_metadata()

你也缺少了几步。使用预准备语句时,必须指定要返回的字段而不是使用星形通配符,然后使用mysqli_stmt::bind_result()指定应将数据库字段放置在哪个变量中。

如果您更熟悉原始的MySQL扩展,准备好的语句有不同的使用过程。如果你的select语句有一个参数(例如,“WHERE value =?”),那么绝对推荐准备好的语句,但对于你的简单查询,mysqli:query()就足够了,与mysql_query()