我正在用PHP开发SOAP服务
最近我在从MySQL检索结果时遇到了一个问题
的问题
检索结果时,我获得的列数多于我的SQL语句中指定的列数。在处理检索到的信息时,这会影响我的代码。例如,当我将fetch()
更改为fetchAll()
时,我无法处理多条记录。有没有办法告诉PHP
或MySQL
完全返回我需要的列而不返回这些垃圾?
示例代码
$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()
的实施可能会影响结果的可能性。
答案 0 :(得分:1)
您只检索3列。但是,IP地址在其末尾有一些空数据。您可以通过串联运算符告诉字符串:
'IP_address' => '192.168.0.1' . "\0" . '' . "\0" . '' . "\0" . ''
^ ^ ^ ^ ^ ^