初学 PHP 一个重大的坎
fetchColumn(0) 得到第1列的值
fetchColumn(1) 得到空
无论怎么改都得不到想要的结果,简直要崩溃
看文档
http://php.net/manual/en/pdostatement.fetchcolumn.php
Returns a single column from the next row of a result set or FALSE if there are no more rows.
~~~~
文档并不是没说清楚,人家明明写了 next ,你理解不上去怪谁
但它并没有强调该方法移动了 cursor
显然我是受了 java 和 vb 及其它所有数据库操作语言和正常地球人类的思维定势的错误影响,认为一定有一个方法逐个取出一行中的所有列
其实,后面还有个警告
Warning
There is no way to return another column from the same row if you use PDOStatement::fetchColumn() to retrieve data.
说没有办法取到另一列,但没告诉你为什么
该警告理所当然的被有些人忽视
看它的官方权威例子
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Fetch the first column from the next row in the result set */
print("Fetch the first column from the next row in the result set:\n");
$result = $sth->fetchColumn();
print("name = $result\n");
print("Fetch the second column from the next row in the result set:\n");
$result = $sth->fetchColumn(1);
print("colour = $result\n");
?>
The above example will output:
Fetch the first column from the next row in the result set:
name = lemon
Fetch the second column from the next row in the result set:
colour = red
你怎么理解?你能轻易的理解为“先取第一行的 name,再取第 2 行的 colour 吗?”
当然如果你用点脑子的话,可以看到名字是柠檬,颜色是红色
这是不合常理的,既然不合常理,必定有缘故,
在此如果你推理一下的话,就会知道,不合常理的原因,是因为它们取的不是同一行
这个例子就像佛法禅理一样,以微言大义在暗示你
可惜有些人就是懒得动脑子
而且该文档不止一次的暗示你了
坑的就是不喜欢动脑子的人
当然,中国人对英文单词的含义懒得动脑子想也是正常的
一般的文档中的例子是给出正确的做法,谁能想它奇葩的给出个函数中的一个仅仅被暗示的陷阱的错误的反例呢
对懒汉如我来说,只会想都不想拷贝文档给的例子直接去用
受惩罚了吧
这个例子,下面评论有人吐槽了
nobody ?4 months ago
In response to php at luka5 dot de, you cannot assume that the example above is incorrect because we did not see the datasource. If you look, the first column (name) of the first row was 'lemon' and the 2nd column (color) of the 2nd row was red.
If I had to assume, I would suspect the data source did not hold a red lemon.
但它为什么不取名叫 fetchOnlyColumn 或者 fetchTheOnlyColumnOfNextRow 呢
--
修改:baoxiaoqiang FROM 49.74.192.*
FROM 49.74.192.*