多年来我一直在开发中使用以下代码片段.现在突然间我得到一个DB错误:没有这样的字段警告
$process = "process"; $create = $connection->query ( "INSERT INTO summery (process) VALUES($process)" ); if (DB::isError($create)) die($create->getMessage($create));
但如果我使用数字,这很好
$process = "12345"; $create = $connection->query ( "INSERT INTO summery (process) VALUES($process)" ); if (DB::isError($create)) die($create->getMessage($create));
或者将值直接写入表达式
$create = $connection->query ( "INSERT INTO summery (process) VALUES('process')" ); if (DB::isError($create)) die($create->getMessage($create));
我真的很困惑......有什么建议吗?
使用准备好的查询和参数占位符总是更好.像Perl DBI中的这样:
my $process=1234; my $ins_process = $dbh->prepare("INSERT INTO summary (process) values(?)"); $ins_process->execute($process);
为获得最佳性能,请在打开数据库连接后立即准备所有常用查询.许多数据库引擎会在会话期间将它们存储在服务器上,就像小型临时存储过程一样.
它也非常有利于安全.将值写入插入字符串本身意味着必须在每个SQL语句中编写正确的转义码.使用prepare和execute样式意味着只有一个地方(执行)需要知道转义,如果甚至需要转义.