如何使用PDO输出字符串而不是单元素数组?

时间:2017-06-19 18:42:05

标签: php mysql pdo prepared-statement

我想在我的mysql数据库中选择一个包含以逗号分隔的值的字段(假设它是“dd,bb,ee”),这样就可以将它们分解并转换为数组。 但是,如果尝试这样做:

$sql = $conn->prepare("SELECT contacts FROM Users WHERE username = ?");
$sql->execute($usernametmp);
$oldcontacts = $sql->fetch(PDO::FETCH_COLUMN);

我收到此错误:

Warning: PDOStatement::execute() expects parameter 1 to be array, string 
given in /.../.../.../.../.../....php

在执行行上,而如果我执行以下操作:

$sql = $conn->prepare("SELECT contacts FROM Users WHERE username = ?");
$sql->execute(array($usernametmp));
$oldcontacts = $sql->fetch(PDO::FETCH_COLUMN);

它可以工作,但是db条目作为一个包含“dd,bb,ee”的数组元素出现,它需要是一个字符串,以便我使用逗号作为分隔符对其进行爆炸

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

我相信PDO #Password for the pfx file of the original cert $password = ConvertTo-SecureString -String '<UPDATETHIS>' -AsPlainText -Force #import the orginal cert with private key Import-AzureKeyVaultCertificate -VaultName 'VaultName' -Name 'Certname' -FilePath 'PATHTOPFXFILE' -Password $password #set the policy to allow key reuse if the CA will create a new signed cert from the existing CSR Set-AzureKeyVaultCertificatePolicy -VaultName 'VaultName' -Name 'Certname' -ReuseKeyOnRenewal $true #create a cert policy object from the existing cert $certpolicy = Get-AzureKeyVaultCertificatePolicy -VaultName 'VaultName' -Name 'Certname' #create a pending cert operation, you can pull a new CSR from this if need be $certificateOperation = Add-AzureKeyVaultCertificate -VaultName 'VaultName' -Name 'Certname' -CertificatePolicy $certpolicy #import the new signed cert into KeyVault for issuing Import-AzureKeyVaultCertificate -VaultName 'VaultName' -Name 'Certname' -FilePath 'PATHTONEWSIGNEDCERTINCRT' 函数返回一个数组,而不是标量,即使该行包含单个列。

(我根本不熟悉fetch函数的PDO::FETCH_COLUMN样式。是否记录在某处?我认为该样式可以与fetch函数一起使用但是那仍然会返回一个数组。)

PDO fetchAll函数将返回标量,而不是数组。

参考:http://php.net/manual/en/pdostatement.fetchcolumn.php

(将绑定参数传递到fetchColumn是一个单独的无关问题。)