PDO returns longtext 列上的 NULL,即使它不是 NULL
PDO returns NULL on longtext column, even if it's not NULL
我正在尝试从外部 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。带有 ID 的 post : 821存在且内容丰富)。
为什么它在该列上返回 NULL?
补充说明:
post_content
列有 longtext
类型
post_content
里面有一段很长的文字,2086 个字符,充满了 html 标签。
编辑: 答案正确且有效。奇怪的是 var_dump
正确输出了内容,而 FirePHP returns 中的函数 fb()
NULL。小心!
检索 'longtext' (blob) 列的示例的实现。
注意:手册不正确关于返回一个流,因为它returns一个字符串包含'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);
Table定义
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)
我正在尝试从外部 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。带有 ID 的 post : 821存在且内容丰富)。
为什么它在该列上返回 NULL?
补充说明:
post_content
列有longtext
类型post_content
里面有一段很长的文字,2086 个字符,充满了 html 标签。
编辑: 答案正确且有效。奇怪的是 var_dump
正确输出了内容,而 FirePHP returns 中的函数 fb()
NULL。小心!
检索 'longtext' (blob) 列的示例的实现。
注意:手册不正确关于返回一个流,因为它returns一个字符串包含'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);
Table定义
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)