Sen isteğe bağlı 'session' değişkeni kullanabilirsiniz bak. Bu şekilde diğer müşterileri etkilemez. SESSION sql_mode öğesini ayarlayabilir ve ardından sorgulama tamamlandıktan sonra önceki değere geri yükleyebilirsiniz. Bu şekilde, belirli bir işlem için sql_mode öğesini ayarlayabilirsiniz. MySQL kılavuzunda itibaren
:
"Sen bir SET kullanarak çalışma zamanında SQL modunu değiştirebilirsiniz | sql_mode sistemi değerini ayarlamak için [GLOBAL OTURUM] sql_mode = 'modun deyimi. GLOBAL değişkenini ayarlamak, SUPER ayrıcalığını gerektirir ve , o zamandan bağlanan tüm istemcilerin çalışmasını etkiler. SESSION değişkeni ayarı yalnızca geçerli istemciyi etkiler. Herhangi bir istemcisi, herhangi bir zamanda kendi oturum sql_mode değerini değiştirebilir. "
Bunu işlemek için veritabanı sınıfıma kişisel olarak bazı yöntemler ekledim. initSqlMode() 'SELECT SESSION.sql_mode' sorgusunu yürütecek ve varsayılan değeri bir sınıf değişkeni olarak saklayacaktır. setSqlMode(), SESSION sql_mode değerini (VALIDATED) özel değerine ayarlamanıza izin verir. resetSqlMode(), SESSION sql_mode değerini varsayılan değere döndürür. Sql_mode'yi her zaman manipüle ederken SESSION değişkenini kullanırım.
Ardından, aşağıdaki gibi bir şey yapabilirsiniz. Bu sadece psuedocode olduğunu unutmayın; Örneğimde sql enjeksiyonunu engellemek veya sql sorgusunu parametrelemek için hiçbir şey yoktur.
$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;
}
}
Kabul edilen yanıt yanlış olduğu ortaya çıktı, lütfen onay işaretini değiştirir misiniz? –