当前位置: 首页 > 面试题库 >

PDO准备好的语句fetch()返回双精度结果

常经赋
2023-03-14
问题内容

我有一个输出到CSV文件的脚本。但是,即使数据库中当前只有一行,但我得到的输出却在表的每一行中回显了每一列两次。

例如:1,1,John,John,Smith,Smith,2014,2014应该为1,John,Smith,2014

在我使用PDO和准备语句之前,这种方法很好用,所以我在想也许我不了解fetch()如何正确工作。下面是我的代码。知道我做错了什么吗?

// get rows
$query_get_rows = "SELECT * FROM Contacts ORDER BY date_added DESC";
$result_get_rows = $conn->prepare($query_get_rows);
$result_get_rows->execute();         
$num_get_rows = $result_get_rows->rowCount();

while ($rows_get_rows = $result_get_rows->fetch()) 
{
  $csv .= '"'.join('","', str_replace('"', '""', $rows_get_rows))."\"\n";
}
echo $csv;
exit;

问题答案:

您应该对PDO说,您只需要一个关联数组或一个带编号的数组:

while ($rows_get_rows = $result_get_rows->fetch(PDO::FETCH_ASSOC))

得到一个关联数组或

while ($rows_get_rows = $result_get_rows->fetch(PDO::FETCH_NUM))

获取由列号索引的数组

从PDOStatement :: fetch

fetch_style

控制如何将下一行返回给调用方。该值必须是PDO :: FETCH_ *常量之一,默认为PDO ::
ATTR_DEFAULT_FETCH_MODE的值(默认为PDO :: FETCH_BOTH)。

PDO :: FETCH_ASSOC:返回一个在结果集中返回的按列名索引的数组

PDO :: FETCH_BOTH(默认值) :返回一个数组,该数组同时在结果集中返回,并且由列名和0索引的列号索引



 类似资料:
  • 问题内容: 今天有人告诉我,我确实应该在应用程序中使用PDO和准备好的语句。在我了解好处的同时,我也在努力了解如何将其实现到我的工作流程中。除了它使代码更简洁外,我是否应该有一个特定的数据库类来容纳所有准备好的语句,还是应该在每次运行查询时都创建一个?我发现很难理解何时应使用标准PDO查询以及何时应使用准备好的语句。任何示例,技巧或教程链接将不胜感激。 问题答案: pdo :: prepare()

  • 问题内容: 我一直在做的简单连接,: 虽然使用这个我一直使用的简单的方法,使查询之前逃脱的任何数据,不管是,,或者通过使用 现在我知道这在一定程度上是安全的! 它逃脱了危险人物;但是,它仍然容易受到其他攻击的攻击,这些攻击可能包含安全字符,但可能有害于显示数据或在某些情况下恶意修改或删除数据。 因此,我进行了一些搜索,以了解有关PDO,MySQLi和准备好的语句的信息。是的,我可能迟到了游戏,但是

  • 问题内容: 在PDO :: Prepare页上指出: “并且通过消除对参数的手动引用来帮助防止SQL注入攻击” 知道这一点,是否有一个像mysql_real_escape_string()这样的PHP函数可以照顾到PDO的转义?还是PDO会为我做好一切转义? 编辑 我现在意识到我问了一个错误的问题。我的问题确实是,“ PDO会为我做什么?” 我现在通过这些答案意识到,它实际上仅消除了对引号进行转义

  • 问题内容: 我有一个简单的准备好的声明,用于实际存在的电子邮件: 结果:在应回显时回显 我在控制台中运行了相同的查询,并使用与上述相同的电子邮件得到了结果。 我也使用一个简单的mysqli查询进行了测试: 结果:我所期望的 还的是1。 为什么准备的陈述 不大于0? 问题答案: 当您通过mysqli执行一条语句时,直到您获取结果,结果才真正在PHP中出现- 结果由数据库引擎保存。因此,对象无法知道执