DBI обрабатывает все ускользающей для вас. В случае строки это будет 'rajeev'
. Вызов select * from table where name = rajeev
даст вам ошибку.
Если вы предоставляете номер, он не будет добавлять кавычки, потому что они не нужны.
См. DBI Doc. В нем также говорится:
Метод quote() не следует использовать с «Placeholders and Bind Values».
Использование заполнителей иногда берет на себя котирование для вас, в зависимости от того, какой DBD вы используете. В вашем случае DBD::mysql вызовов $dbh->quote()
как указано в док:
Альтернативный подход
$dbh->do("INSERT INTO foo VALUES (?, ?)", undef, $number, $name);
в этом случае метод цитата выполняется автоматически.
Если у вас есть доступ к query log, вы можете проверить, на что похожи запросы. Если у вас есть запросы, которые занимают много времени, вы также можете открыть консоль mysql и сказать SHOW FULL PROCESSLIST;
, чтобы просмотреть список запущенных запросов. Это также будет содержать полные инструкции SQL для вас. В Windows вы можете использовать HeidiSQL, чтобы сделать это.
Попробуйте и посмотрите. Один сравнивает столбец 'name' с * с именем' rajeev' *, а другой - с строковым литералом ''rajeev'' *. Да, в качестве комментариев @bohica ниже, утверждение удобно не буквально интерполировать - см. [Docs для 'mysql_server_prepare'] (http://search.cpan.org/dist/DBD-mysql/lib/DBD/mysql.pm) - но вы сможете определить, какие семантики действуют ... – pilcrow