2009-11-11 3 views
1

Я использую mysql с PHP, мне просто интересно, может ли этот запрос PHP-переменные в запросах mysql

$query = "UPDATE tblName SET field='$fieldValue' WHERE field2='$fieldValue2'"
вызвать ошибку памяти из памяти mysql. Будет ли этот запрос
$query = "UPDATE tblName SET field='".$fieldValue."' WHERE field2='".$fieldValue2."'"
потреблять меньше памяти, чем предыдущий?

Im получение этой ошибки: Недостаточно памяти (требуется nnnnnnn байт) и ее указание на запрос в том же формате, что и первый выше.

Спасибо.

+5

Не ответ, а просто хороший совет: никогда не используйте '$ var =" Text $ var text ";'. Это настолько ужасный и ужасный стиль программирования, что мои глаза продолжают появляться каждый раз, когда я это вижу. Это безопаснее и даже проще поддерживать код, который всегда правильно экранируется. Просто потому, что вы можете это сделать, это не значит, что это хороший стиль. Итак, ради любви к Богу: беги переменные! ВСЕГДА! –

+0

oh .. спасибо за подсказку программирования. плохо постарайтесь запомнить его в следующий раз. – uji

+1

ApoY2k, вы массово преувеличиваете. Конечно, избегайте ввода пользователя, но говоря '$ var =" Text $ var text ";' ужасно, это просто неправильно. – DisgruntledGoat

ответ

1

Что касается MySQL, две строки одинаковы.

Насколько велики эти значения в $fieldValue и $fieldValue2? Если они занимают несколько мегабайт, попытка выделить место для переменной $query может превышать ваш предел памяти PHP - возможно, вам нужно ее увеличить, если вы работаете с большими данными.

+0

Значения для $ fieldValue и $ fieldValue2 невелики. Пока нет. В любом случае спасибо, стараюсь увеличить лимит – uji

0

Обе строки одинаковы, одна использует встроенную интерполяцию, другая использует конкатенацию строк. Я думаю, ваша проблема должна быть найдена где-то в другом месте.

1

Если у вас такой код, this произойдет. Не смей код, пожалуйста.

+0

Введенный код не указывает, откуда берутся значения поля - вполне возможно, что значения в переменных уже были предварительно обработаны для проверки + экранирования. – Amber

+0

Может быть, но вряд ли. Назовите это догадкой ^^ – anddoutoi

+0

@ Dav Нет, даже в этом случае вы ошибаетесь. Используйте подготовленные заявления. Независимо от того, что вы делаете, просто не используйте конкатенацию строк. – shylent

0

Ну, ошибка из памяти, вероятно, связана с тем, что значения в этих переменных слишком велики. Если это так, вы должны изучить подготовленные заявления, поскольку они могут обрабатывать БОЛЬШЕ больших значений, чем простые запросы.

Смежные вопросы