我似乎无法获得一个带参数的简单WHERE子句,我不断收到一条错误消息:
[Microsoft][ODBC SQL Server Driver][SQL Server]The data types varchar(max) and text are incompatible in the equal to operator. (SQLExecute[402] at ext\pdo_odbc\odbc_stmt.c:254)
Run Code Online (Sandbox Code Playgroud)
我以多种不同的方式尝试过此查询,例如
无名:
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = ?");
$query->execute( array('assessment') );
Run Code Online (Sandbox Code Playgroud)
未命名并使用bindValue将其设置为字符串
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = ?");
$query->bindValue(1, 'assessment', PDO::PARAM_STR);
$query->execute( );
Run Code Online (Sandbox Code Playgroud)
命名并使用bindParam将其设置为字符串:
$val = 'assessment';
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = :myp");
$query->bindParam(':myp', $val, PDO::PARAM_STR);
$query->execute( );
Run Code Online (Sandbox Code Playgroud)
但无论我怎么做,我总是得到这个错误信息.
有问题的列是类型:varchar(max),因此假设发送的参数是'text'类型,即使我将其指定为字符串值(char,varchar)
我无法更改数据库,因为它是另一个软件. …
编辑:
现在在jsbin.com/ivukar/10上的工作示例
这是我正在尝试做的事情,总结到核心步骤,没有对你来说毫无意义的所有细节:
现在按照这些步骤,假设我们div的HTML内容是"test",我希望如下:
然而,只要我对元素的html内容进行了更改,就会发生这样的事情:例如:$('#element').html('altered');它也会改变变量的内容......
我不明白为什么它会这样做,因为变量只有在将它附加到DOM时才被引用,我不会改变变量的内容......
这是一个JsBin链接,所以你可以看到我的意思.
或者这里是示例代码:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script>
var saved = '';
function my_clone()
{
saved = $('#el').clone();
$('#output').append("<a href='#' onclick='my_remove();'>Remove version on screen</a> ----- This removes any element with the id 'el'<br>");
}
function my_remove()
{
$('#el').remove();
$('#output').append("<a href='#' onclick='my_append();'>Append clone to body</a> ----- This takes the cloned object stored in the variable 'saved' and appends it to …Run Code Online (Sandbox Code Playgroud) 我真的很困惑.
此查询在localhost上完全正常,但在任何实际的实时服务器上都不行.对同一数据库的其他查询起作用,因此连接或pdo扩展名没有任何问题.
基本上这是查询:
$sql = "SELECT * FROM bksb_Resources";
$query = $this->connection->query($sql, array());
Run Code Online (Sandbox Code Playgroud)
query()方法返回PDOStatement对象
然后我调用$this->connection->fetch($query)一个循环,然后循环路由到"连接"对象上的方法:
function fetch_pdo($st)
{
return $st->fetch();
}
Run Code Online (Sandbox Code Playgroud)
所以基本上它是从一个表中选择所有,然后返回第一行(它是一个循环,但这不是真正相关).
在localhost上,这很好.没问题.
在我的实时服务器上,我得到:
Fatal error: Cannot access empty property in /var/www/html/demo/blocks/elbp/classes/db/MSSQL.class.php on line 652
Run Code Online (Sandbox Code Playgroud)
其中第652行是从上面的fetch_pdo方法返回的.
我在它运行fetch()之前打印出语句,它在两台服务器上都没问题:
PDOStatement Object
(
[queryString] => SELECT * FROM bksb_Resources
)
Run Code Online (Sandbox Code Playgroud)
我真的没有想法.当其他查询在实时服务器上工作正常时,我无法理解为什么这可以在一台服务器而不是另一台服务器上运行.
(好吧......我说其余的,这本来是一个不同的问题,localhost上的查询返回了正确的结果,并且live上的查询没有返回任何内容,即使我在Management Studio上运行复制/粘贴查询它工作正常. ..但在试图调试我遇到过这个).
有人有任何想法吗?
谢谢
编辑:
打电话给 $this->connection->query($sql, array());
这叫:
/**
* Run an SQL query and return a statement - to be used for things like selecting
* @param …Run Code Online (Sandbox Code Playgroud)