Php 准备PDO语句和MS SQL
我终于让我的CentOS box在网络上与我们的MS SQL box对话,但现在我在运行一个准备好的PDO语句时遇到了一个问题。如果我从末尾删除:desc并输入变量名或单词本身,下面的语句就会起作用。SQL小姐是不喜欢这类语句,还是我遗漏了什么Php 准备PDO语句和MS SQL,php,sql,sql-server,pdo,Php,Sql,Sql Server,Pdo,我终于让我的CentOS box在网络上与我们的MS SQL box对话,但现在我在运行一个准备好的PDO语句时遇到了一个问题。如果我从末尾删除:desc并输入变量名或单词本身,下面的语句就会起作用。SQL小姐是不喜欢这类语句,还是我遗漏了什么 $cn = "AARONS"; $result = $pdo->prepare("SELECT * from CommonNameAddress where CommonName = :desc"); $r
$cn = "AARONS";
$result = $pdo->prepare("SELECT * from CommonNameAddress where CommonName = :desc");
$result->execute(array(':desc' => $cn));
编辑 执行一些错误检查后,返回的错误为:
Array (
[0] => 22001
[1] => 0
[2] => [Microsoft][ODBC Driver 11 for SQL Server]String data, right truncation (SQLExecute[0] at /builddir/build/BUILD/php-5.3.3/ext/pdo_odbc/odbc_stmt.c:254)
[3] => 22001
)
也许检查一下你的报税表,看看是否发生了错误
if( ! $result = $pdo->prepare("SELECT * from CommonNameAddress where CommonName = :desc") ) {
print_r( $pdo->errorInfo() );
} else if( !$result->execute(array(':desc' => $cn)) ) {
print_r( $result->errorInfo() );
} else {
//success
}
也许检查一下你的报税表,看看是否发生了错误
if( ! $result = $pdo->prepare("SELECT * from CommonNameAddress where CommonName = :desc") ) {
print_r( $pdo->errorInfo() );
} else if( !$result->execute(array(':desc' => $cn)) ) {
print_r( $result->errorInfo() );
} else {
//success
}
最后需要像这样的
,而不是=
在WHERE
部分之后:
$result = $pdo->prepare("SELECT * from CommonNameAddress where CommonName like :name");
$result->execute(array(':name' => "%$cn%"));
最后需要像
这样的,而不是=
在WHERE
部分之后:
$result = $pdo->prepare("SELECT * from CommonNameAddress where CommonName like :name");
$result->execute(array(':name' => "%$cn%"));
检查mysql版本是否支持该功能,我猜它不支持。MS SQL server是2005版,但这不重要,对吗?PHP脚本不是做了所有的工作,然后发布了SQL Select吗?哦,你完全正确,我不知道PDO在内部是如何工作的,但是尝试用其他变量名重命名“desc”占位符,然后再试一次…我将其切换为:name with the same results检查mysql版本是否支持该功能,我的猜测是不是。微软的SQL server是2005年的,但这不重要,不是吗?PHP脚本不是做了所有的工作,然后发布了SQL Select吗?哦,你完全正确,我不知道PDO在内部是如何工作的,但是试着用其他变量名重命名“desc”占位符,然后再试一次……我将其切换为:name,结果相同。HMM,返回给我这个:数组([0]=>22001[1]=>0[2]=>[Microsoft][SQL Server的ODBC驱动程序11]字符串数据,右截断(SQLExecute[0]at/builddir/build/build/php-5.3.3/ext/pdo_ODBC/ODBC_stmt.c:254)[3]=>22001)很确定这意味着你的数据比字段长。数据怎么可能太长?如果我替换PDO变量,它返回的很好。这也可能是一个错误,请尝试添加$PDO->setAttribute(PDO::ATTR\u EMULATE\u PREPARES,TRUE)
在创建PDO对象后立即执行。我想这可能是由于某种原因导致的奇怪错误或我的实现不好。这种编码与MySQL PDO配合使用,我有其他页面,只是不喜欢MS SQL Server$PDO=new PDO(“odbc:NWS”,“username”,“password”);$PDO->setAttribute(PDO::ATTR_EMULATE_PREPARES,TRUE);$cn=“AARONS”;$result=$PDO->prepare(“从CommonName地址中选择*,其中CommonName=:name”);$result->execute(数组(':name'=>$cn));嗯,返回给我这个:数组([0]=>22001[1]=>0[2]=>[Microsoft][ODBC驱动程序11 for SQL Server]字符串数据,右截断(SQLExecute[0]在/builddir/build/build/php-5.3.3/ext/pdo_odbc/odbc_stmt.c:254)[3]=>22001)非常确定这意味着您的数据比字段大小长。数据怎么可能太长?如果替换pdo变量,它返回的结果很好。这也可能是一个错误,请尝试添加$pdo->setAttribute(pdo::ATTR_EMULATE_,TRUE)
在创建PDO对象后立即执行。我想这可能是由于某种原因导致的奇怪错误或我的实现不好。这种编码与MySQL PDO配合使用,我有其他页面,只是不喜欢MS SQL Server$PDO=new PDO(“odbc:NWS”,“username”,“password”);$PDO->setAttribute(PDO::ATTR_EMULATE_PREPARES,TRUE);$cn=“AARONS”;$result=$PDO->prepare(“从CommonName地址中选择*,其中CommonName=:name”);$result->execute(数组(':name'=>$cn));