При подготовке запроса насколько важно проверить, является ли ($ stmt = $ mysqli-> prepare ($ query)) ложным? - PullRequest
1 голос
/ 04 декабря 2010

Это просто проблема, когда есть проблема с подключением к базе данных?(Я проверяю, было ли соединение с базой данных успешным).Предполагая, что я делаю достаточно проверок, чтобы убедиться, что мои запросы всегда верны, можно ли пропустить следующую проверку:

if ($ stmt = $ db-> prepare ($ query)) {// morecode}

и вместо этого просто выполните:

$ stmt = $ db-> prepare ($ query);// больше кода

Я думаю, что транзакции могут сделать это нормально, но мои таблицы базы данных не поддерживают транзакции (я использую MyISAM, потому что я делаю намного большедБ читает, чем пишет).

Спасибо!

1 Ответ

1 голос
/ 10 января 2011

Здесь Танду вводит в заблуждение понятие, которое вы, к сожалению, приняли как ответ.

Независимо от того, какой уровень абстракции базы данных вы используете (вы используете mysqli), он фактически зависит от того, эмулируется ли подготовленный запрос или он изначально выполняется на уровне базы данных. Подготовленный запрос может и должен потерпеть неудачу, если базовый механизм базы данных не может «подготовить» его.

Это не имеет никакого отношения к тому, было ли ваше соединение с базой данных успешным.

Вы абсолютно должны проверить возвращаемое значение вызова prepare (). Если у вас есть программная ошибка, она потерпит неудачу. Если у вас есть другой уровень проблемы с приложением, он потерпит неудачу. И т.д. Вот и весь смысл возвращаемого значения.

Если вы полагаете, что это всегда хорошо, вы рискуете ошибочным запросом, который может привести к потере данных - потенциально больше.

Чтобы быть ясно понятным, важно проверять результат каждый раз, когда запрос может быть неудачным. Что вы не знаете ... следовательно, всегда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...