PHP: изменение переменных запроса во время цикла while - PullRequest
0 голосов
/ 14 января 2010

Я надеялся изменить одну из переменных запроса из цикла while, возможно ли это сделать? EG.

$query = mysql_query('SELECT column1, column2 FROM table1 WHERE column1 = "'.$variable.'";', $conn);
while ($data = mysql_fetch_assoc($query)) {
    if($data['column2'] == 'original') {
        $variable = 'altered';
    }
}

Я просто хочу посмотреть, возможно ли это, или массив $ data уже полностью сгенерирован, прежде чем переходить к оператору while?

Спасибо

Ответы [ 4 ]

1 голос
/ 14 января 2010

Я полагаю, что вы пытаетесь изменить запрос, который вы выполняете, путем изменения переменной?

к тому времени, когда вы меняете переменную, вы уже выполнили запрос, и $ data «полностью сгенерирован», как вы говорите.

0 голосов
/ 14 января 2010

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

// Создать экземпляр объекта PDO для подключения к базе данных. $ db = новый PDO ('mysql: unix_socket = / tmp / mysql.sock', $ user, $ password);

// загрузить запрос в объект, используя? в качестве заполнителя. $ q = $ db-> prepare ("ВЫБЕРИТЕ столбец1, столбец2 ИЗ таблицы1 ГДЕ столбец1 =?");

// присваиваем значение заполнителю внутри массива и выполняем один раз. $ Q-> выполнить (массив ( 'Foo'));

while ($ row = $ q-> fetch ()) { if ($ row ['column2'] == 'original') {$ v = "изменено"; $ Q-> выполнить (массив ($ v)); перерыв;} // выполнить новый запрос, используя новое значение. }

0 голосов
/ 14 января 2010

Запрос уже был выполнен, когда вы используете mysql_query (), mysql_fetch_assoc () просто интерпретирует возвращаемые данные. Так что нет.

Вы можете теоретически сделать что-то вроде:

$query = mysql_query('SELECT column1, column2 FROM table1 WHERE column1 = "'. $variable.'";', $conn);
while ($data = mysql_fetch_assoc($query)) {
    if($data['column2'] == 'original') {
        $variable = 'altered';
        // Run the query with the new $variable value.
        $query = mysql_query('SELECT column1, column2 FROM table1 WHERE column1 = "'. $variable.'";', $conn);
    }
}

Для повторного выполнения запроса каждый раз, но это не совсем то, что вы хотите сделать, иначе он может застрять в цикле.

0 голосов
/ 14 января 2010

Запрос был выполнен, изменение переменных не имело бы значения, даже если бы оно работало. Когда запрос выполняется с mysql_query, данные, которые он возвращает, просто так и не изменятся, независимо от того, насколько вы изменили переменные, которые вы использовали в запросе.

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

...