PHP PDO返回空列名

时间:2017-04-06 16:04:26

标签: php mysql soap pdo bindparam

我正在用PHP开发SOAP服务 最近我在从MySQL检索结果时遇到了一个问题 的问题
检索结果时,我获得的列数多于我的SQL语句中指定的列数。在处理检索到的信息时,这会影响我的代码。例如,当我将fetch()更改为fetchAll()时,我无法处理多条记录。有没有办法告诉PHPMySQL完全返回我需要的列而不返回这些垃圾?
示例代码

$stmt2 = $pdo2->prepare("SELECT `id`, `username`, `IP_address` FROM PADR_users WHERE `username` LIKE :username");
$stmt2->bindParam(':username',$searchParam, PDO::PARAM_STR, 20);
$stmt2->execute();
$tmp = $stmt2->fetch(PDO::FETCH_ASSOC);
$response->return = var_export($tmp, true);

这将产生:

object(stdClass)#4 (1) { ["return"]=> string(193) "array ( 'id' => '19', 'username' => 'Batman2', 'IP_address' => '192.168.0.1' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '', )" }

在我打电话给MySQL之前,我也尝试过使用这些:

$pdo2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo2->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_NATURAL);

然而,它没有丝毫差异 注意
我故意离开fetch()而不是fetchAll(),以消除fetchAll()的实施可能会影响结果的可能性。

1 个答案:

答案 0 :(得分:1)

您只检索3列。但是,IP地址在其末尾有一些空数据。您可以通过串联运算符告诉字符串:

'IP_address' => '192.168.0.1' . "\0" . '' . "\0" . '' . "\0" . '' 
                              ^      ^    ^      ^    ^      ^