PDO在longtext列上返回NULL,即使它不是NULL

时间:2015-03-12 19:06:51

标签: php mysql wordpress pdo

我尝试从wordpress外部手动获取Wordpress table wp_post上的一行。我按如下方式使用PDO:

$dbh2 = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASSWORD);
    $dbh2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh2->prepare("SELECT WP.* FROM wp_posts WP, wp_term_relationships WTR WHERE WP.ID = WTR.object_id AND WP.ID = '821'");
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($results as $result){
    print_r($result);

}

查询有效,但我得到一个非常奇怪的结果:列post_content返回为NULL,即使它不为空(我在PhpMyAdmin上查看过。标题为:821的帖子存在且充满内容。)

为什么在该列上返回NULL?

附加说明:

  1. post_content列有longtext类型
  2. post_content里面有很长的文字,2086个字符和完整的html标签。
  3. 编辑:答案是正确无误的。奇怪的是var_dump正确输出内容,而来自FirePHP的函数fb()返回NULL。小心!

1 个答案:

答案 0 :(得分:1)

检索'longtext'(blob)列的示例的实现。

注意:手册不正确关于返回一个流,因为它返回一个字符串,其中包含'lob'的内容

$pdo = new PDO("mysql:host=localhost;dbname=testmysql", 'test', 'test');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare("SELECT WP.ID,
                            WP.post_title,
                            WP.post_content,
                            length(WP.post_content) AS post_length
                       FROM
                             wp_posts WP
                       WHERE
                             WP.ID = :ID");

// which record to select
$stmt->bindValue(':ID', 821, PDO::PARAM_INT);

// store output in these variables
$stmt->bindColumn(1, $wpId, PDO::PARAM_INT);
$stmt->bindColumn(2, $wpTitle, PDO::PARAM_STR);
$stmt->bindColumn(3, $wpContent, PDO::PARAM_LOB);
$stmt->bindColumn(4, $wpLength, PDO::PARAM_INT);

$stmt->execute();
$results = $stmt->fetch(PDO::FETCH_BOUND);

// display output
var_dump($wpId, $wpTitle, $wpLength);
var_dump($wpContent);

表定义

Field         Type          
------------  ------------  
ID            bigint(20)    
post_title    varchar(255)  
post_content  longtext

示例输出:

int 821
string 'first' (length=5)
int 2741

string 'First Post - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean lacus urna, impe'... (length=2741)