在运行时设置sql_mode时,可以使用可选的“SESSION”变量.这样它不会影响其他客户.您可以设置SESSION sql_mode,然后在查询完成后将其设置回上一个值.通过这种方式,您可以为特定操作设置sql_mode.
原文链接:https://www.f2er.com/php/139048.html从MySql手册:
“You can change the sql mode at runtime by using a SET
[GLOBAL|SESSION] sql_mode=’modes’ statement to set the sql_mode system
value. Setting the GLOBAL variable requires the SUPER privilege and
affects the operation of all clients that connect from that time on.
Setting the SESSION variable affects only the current client. Any
client can change its own session sql_mode value at any time.”
我个人在我的数据库类中添加了一些方法来处理这个问题. initsqlMode()将执行查询’SELECT SESSION.sql_mode’并将默认值存储为类变量. setsqlMode()允许您将SESSION sql_mode设置为(VALIDATED)自定义值. resetsqlMode()将SESSION sql_mode设置回默认值.我总是在操作sql_mode时使用SESSION变量.
然后你可以做类似以下的事情.注意这只是伪代码;我的例子中没有任何东西可以阻止sql注入或参数化SQL查询.
$db = new database(); $badqueryresult = $db->executeStrict('BAD sql QUERY'); Class database { ... function executeStrict($query){ $this->initsqlMode(); $this->setsqlMode('STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'); $result = $this->Execute($query); $this->resetsqlMode(); return $result; } }