Mysql
 sql >> база данни >  >> RDS >> Mysql

PDO изпраща необработена заявка към MySQL, докато Mysqli изпраща подготвена заявка, и двете дават един и същ резултат

Вашият PDO е конфигуриран да емулира подготвени заявки, докато mysqli използва истински подготвени заявки.

Подготвената заявка свързва низа ''1'' като стойност на целочислен параметър. PHP го принуждава до цяло число, използвайки нещо като intval() . Всеки низ с водещи знаци, които не са числови, се интерпретира като 0 от PHP, така че стойността на параметъра се изпраща след подготовката е стойността 0.

Фалшивата подготвена заявка използва интерполация на низ (вместо обвързване), за да добавите низа ''1'' в SQL заявката преди MySQL го анализира. Но резултатът е подобен, тъй като SQL също третира низ с нечислови водещи знаци в целочислен контекст като стойност 0.

Единствената разлика е това, което завършва в общия регистър на заявките, когато параметърът е обвързан преди подготовка спрямо след подготовка.

Можете също така да накарате PDO да използва реални подготвени заявки, така че трябва да действа точно като mysqli в този случай:

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

PS:Това може да демонстрира добра причина защо е обичайно стойностите на идентификатор да се започват от 1 вместо от 0.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Напишете файл от BLOB mysql python

  2. java.sql.SQLException:Невалидна стойност на аргумента:java.io.NotSerializableException

  3. Как да промените времето?

  4. Промяна на началния номер за автоматично увеличение?

  5. Как да генерирам следващ номер за автоматично увеличение в mysql с помощта на php?