我已尝试odbc_prepare()
+ odbc_execute()
更新Access文件中的记录但我总是收到有关错误列数的SQL state 07001
错误消息(实际上,消息是在Spanglish中并没有多大意义):
<?php
$items = array();
$items[100] = 'Foo';
$items[200] = 'Bar';
$sql = 'UPDATE street
SET name=?
WHERE street_id=?';
$stmt = odbc_prepare($conection, $sql);
if( $stmt===FALSE ){
die(odbc_errormsg());
}
foreach($items as $cod => $name){
if( !odbc_execute($stmt, array($name, $cod)) ){
die(odbc_errormsg());
}
}
odbc_execute manual page处的用户评论表明Microsoft Access ODBC驱动程序不支持参数化查询。但是,我还没有找到odbc_ *函数来逃避数据。
那么......我怎样才能逃避输入数据呢?
答案 0 :(得分:1)
通常在MS Access中,您可以通过将参数放在括号中来识别参数
$sql = 'UPDATE street
SET name=[myname]
WHERE street_id=[mystreet]';
如何与php进行网格化,我不知道。
答案 1 :(得分:1)
我一直在尝试随机的东西。如果您使用这些语法之一(或者您甚至混合它们),odbc_prepare()
似乎会检测参数:
INSERT INTO foo (bar) VALUES (:param)
INSERT INTO foo (bar) VALUES ([param])
然而,odbc_execute()
会抱怨缺少参数,无论你用什么方式提供参数(数值数组,关联数组......)。并且它将知道无法找到的参数的确切数量。这使得整个机制完全毫无意义。
不幸的是,我的最好的解决办法,到目前为止是这样的:
/**
* Escape a string to be inserted into Access via ODBC
*/
function odbc_escape_string_access($value){
$replacements= array(
"'" => "''",
);
return strtr($value, $replacements);
}
这太可怕但我找不到更好的东西。