比如在一个数据表中有一个字段叫order,是专门用来做排序的,我的语句可能要这么写$sth=$pdo->prepare('SELECT*FROMtable_nameORDERBYorderASC');$sth->execute();但是因为order本身是一个关键字,那么在执行的时候就会报syntax错误,我知道在pdo里对字段可以用:column_name来动态绑定,它会自动处理引号等问题,也可以用$pdo->quote来转义字符串,但是对字段名和表名却没有方法来转义。这种转义在不同的数据库系统里是一样的,比如在mysql里SELECT*FROMtable_nameORDERBY`order`ASC而在sqlite里SELECT*FROMtable_nameORDERBY"order"ASC有没有一种通用而又省事的办法来处理这个问题呢更新根据答案最后总结出一种通用的转义方法$escapes=array('mysql'=>array('`','`'),'mssql'=>array('[',']'));$driver=$db->getAttributes(PDO::ATTR_DRIVER_NAME);$escape=isset($escapes[$driver])?$escapes[$driver]:array('"','"');$field=$escape[0].$field.$escape[1];
繁星淼淼
相关分类