Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 准备PDO语句和MS SQL_Php_Sql_Sql Server_Pdo - Fatal编程技术网

Php 准备PDO语句和MS 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

我终于让我的CentOS box在网络上与我们的MS SQL box对话,但现在我在运行一个准备好的PDO语句时遇到了一个问题。如果我从末尾删除:desc并输入变量名或单词本身,下面的语句就会起作用。SQL小姐是不喜欢这类语句,还是我遗漏了什么

$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));