Обновить таблицу MySQL с помощью foreach () - PullRequest
3 голосов
/ 27 января 2012

Когда я пытаюсь обновить свою таблицу вместо того, чтобы увеличивать массив URL-адресов, то, что выводится в таблицу, является последней записью в массиве url.

Когда я повторяю $url, я могу сказать, что он правильно проходит через массив.Когда я эхо $currentId правильно увеличивается.Почему запрос не вводит каждый $url в строке в моей таблице.Что здесь происходит, что я не понимаю?

$currentId = 1;
foreach($pages as $url)
{
    $query = "UPDATE pageurls SET url='$url' WHERE id='currentId'";
    mysql_query($query);
    echo($url.'<br/>');
    $currentId++;
}

Ответы [ 6 ]

10 голосов
/ 27 января 2012

Вместо

$query = "UPDATE pageurls SET url='$url' WHERE id='currentId'";

... который ищет идентификатор, соответствующий строке"currentId", попробуйте ...

$query = "UPDATE pageurls SET url='".mysql_real_escape_string($url).
         "' WHERE id=".$currentId;

Так как выВы генерируете currentId самостоятельно, это безопасно, но вы должны действительно избегать $ url, используя mysql_real_escape_string.

Редактировать: Как указывает @Topener, я пропустил $ перед currentId, отредактированным, чтобы исправить это.

5 голосов
/ 27 января 2012

Вы сравниваете строку: WHERE id='currentId'

Должна быть переменной WHERE id='$currentId'

2 голосов
/ 27 января 2012

currentId используется как строка, а не как переменная.

Также вы должны убедиться, что экранировали эти значения с помощью mysql_real_escape_string ()

0 голосов
/ 27 января 2012

Вы используете строки вместо переменных!

Этот запрос является замечательным!Если вы обновите много строк, вам понадобится много ресурсов!

Обратите внимание: " Обновление нескольких строк с разными значениями и одним SQL-запросом "

0 голосов
/ 27 января 2012

Убедитесь, что вы правильно экранировали переменные, используемые в запросе (выглядит как intval() для id / $currentId, если это поступает из пользовательского ввода или любого внешнего источника, и mysql_real_escape_string() для url , как сказал @Louis). Затем вставьте их в запрос и не заключайте в кавычки $currentId, если это действительно целое число.

$currentId = 1;

foreach( $pages as $url ) {

    $query = "UPDATE pageurls SET url = '{$url}' WHERE id = {$currentId}";

    mysql_query( $query );

    echo( $url . '<br/>' );

    $currentId++;

}
// foreach
0 голосов
/ 27 января 2012

В этой строке есть ошибка:

$query = "UPDATE pageurls SET url='$url' WHERE id='currentId'";

Я бы изменил это так:

$query = "UPDATE pageurls SET url='".$url."' WHERE id=".$currentId;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...