0

目前,我正在大量提交表单以解决单引号和其他垃圾问题。

 $form_field_value= str_replace("'", "''", stripslashes($form_field_value));

它是使用以下方法准备插入值:

 $insert_sql = "insert into table (field) values ('".$form_field_value."')";
 odbc_exec($conn, $insert_sql);

本质上,我想为这些插入/更新语句使用占位符。

我尝试将$par1and定义$par2为文字,然后执行此

$insert_sql = "insert into table (field,txt) values (?,?)";
odbc_exec($conn, $insert_sql, $par1, $par2);

它失败并给了我这个错误:

警告:odbc_exec() [function.odbc-exec]:SQL 错误:[Microsoft][ODBC SQL Server Driver]COUNT 字段不正确或语法错误,第 10 行 test.php 中 SQLExecDirect 中的 SQL 状态 07001

第 10 行是 exec 语句。


我找不到在这个 odbc 驱动程序中使用占位符的语法。有什么建议么?

$conn连接变量工作正常。


编辑:

最后一次尝试仍然失败 - odbc_execute() 是一个未定义的函数。我必须使用 odbc_exec()

$par1="eggs";
$par2="milk";

$insert_crs = "insert into table (field,txt) values (?,?)";
$stmt = odbc_prepare($conn, $insert_sql); 

odbc_exec($stmt, array($par1, $par2));
4

1 回答 1

1

根据http://www.php.net/manual/en/function.odbc-prepare.php,您应该准备然后执行您的 SQL 语句,并且您应该为 dobc_execute() 的第三个参数提供一个新数组:

<?php
$a = 1;
$b = 2;
$c = 3;
$stmt = odbc_prepare($conn, 'CALL myproc(?,?,?)');
$success = odbc_execute($stmt, array($a, $b, $c));
?>

这意味着您的代码应如下所示:

$insert_sql = "插入表(字段,txt)值(?,?)";
// 与您的代码相比,以下行是新的
$stmt = odbc_prepare($conn, $insert_sql);
// 注意下面的行用 array() 包裹了 $par1 和 $par2
// 删除的版本不正确 - 复制/粘贴错误 :(
odbc_exec($stmt, $insert_sql, 数组($par1, $par2));
odbc_execute($stmt, 数组($par1, $par2));
于 2009-11-17T20:25:34.680 回答