Получить данные для записей MySQL через массив? - PullRequest
1 голос
/ 14 января 2011

Я работаю над своим веб-сайтом и пытаюсь реализовать функцию, которая работает следующим образом:

Администратор устанавливает флажок в записи, чтобы показать, что платеж получен. Значения хранятся в массиве с именем $paymentr, который внедряется и обновляет базу данных MySQL.

Теперь вот где начинается сложная часть (для меня, во всяком случае):

После этого код проверяет, сколько строк было затронуто, а затем отправляет ОДНО электронное письмо другому лицу, которое должно перечислить всю информацию для записей на основе идентификаторов, хранящихся в массиве.

По какой-то причине у меня было время, когда я пытался понять, как это сделать. У меня был цикл foreach, запущенный прямо перед кодом электронной почты, который выполнял что-то вроде этого (я упростил запрос, поскольку он намного длиннее и сложнее, но я проверял его в phpmyadmin) -

foreach ($paymentr as $v) {

$query = "SELECT transactions.id, transactions.refid, transactions.affid FROM transactions WHERE transactions.id = '$v'";

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n");
$trans = mysql_fetch_array($result, MYSQL_ASSOC);

$transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].'';

}

Тогда эта переменная $ Transactions будет отправлена ​​в коде электронной почты.

Но, к сожалению, это не сработало. У кого-нибудь есть какие-либо идеи? Я чувствую, что мне просто не хватает одного важного куска или идеи ... все было бы полезно. Может быть, array_map? Я никогда этим не пользовался. Большое вам спасибо:)

Ответы [ 2 ]

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

Я попробовал ваш код и не заметил ничего плохого. Чтобы помочь отладке, вы можете попробовать добавить код "print_r" и "echo", чтобы лучше понять, что происходит

Кроме того, вы упомянули, что ваш массив взорван, что, насколько я понимаю, возвращает строку со значениями массива в форме [значение] [разделитель] [значение] ..., если это все еще массив, когда ' foreach 'начинается? Считаете ли вы, что $ транзакции пусто?

print_r ($paymentr);  // <-----  ADDED FOR DEBUG

foreach ($paymentr as $v) {

$query = "SELECT id, refid, affid FROM transactions WHERE id = '$v'";

echo $query . "<br/>";  // <-----  ADDED FOR DEBUG,  (XHTML <br/> closed tag)

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n");
$trans = mysql_fetch_array($result, MYSQL_ASSOC);

$transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].'';    
}

Или, вы можете сделать это, что меньше попадет в БД:

foreach ($paymentr as $v) { $in_clause .= "'".$v."',"; }
$in_clause = trim($in_clause, ",");
$query = "SELECT id, refid, affid FROM transactions WHERE id IN ($in_clause)";

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n");
while ( $trans = mysql_fetch_array ( $result, MYSQL_ASSOC ))    
{
  $transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].'';
}
1 голос
/ 14 января 2011

У меня нет руководства php-mysql передо мной, однако вы не должны использовать вызов как mysql_fetch_assoc, а не mysql_fetch_array.

Когда вы используете mysql_fetch_array, вы указываете поля как $ trans [0], $ trans ['1], а не как строки, например. $ Транс [ 'ID']

- извините, вы правы, я всегда использую вызов mysql_fetch_assoc, а не флаг. Как вы пошли с добавлением операторов отладки, если вы напечатали копию оператора SQL и вставили его в окно запроса - чтобы убедиться, что он работает правильно. Выполните другие вызовы БД, как ожидается, возможно, вы не получите никаких результатов.

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