Я обновил код Луи, потому что я думаю, что он может лучше обрабатывать.
//Get the listing info
$pdo = new PDO($h1, $u, $p);
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $pdo->prepare('
SELECT uFName, uLName, listTitle, listPropPrice, listCmt, listDt, listID
FROM User U, Listing L
WHERE U.uID = L.uID');
$sth->execute();
$listings = $sth->fetchAll();
//Prepare the statement to grab the merchant info for the listing
$pdo2 = new PDO($h1, $u, $p);
$pdo2->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth2 = $pdo2->prepare('
SELECT mFName, mLName, moAmt, moDtOff
FROM Merchant M, MerchantOffer MO, Listing L
WHERE M.mID = MO.mID
AND L.listID = MO.listID
and L.listID = :listid');
$sth2->bindParam(':listid', $listing['listID'], PDO::PARAM_INT);
//loop through all the listings
foreach($listings as $listing){
echo "Listing info...<br/>";
// Executed prepared statement (the parameter is updated automatically)
$sth2->execute();
//if there is only one merchant per listing, probably don't
//need fetchAll and can go back to single row
$merchants = $sth2->fetchAll();
//loop through all merchants
foreach($merchants as $merchant){
echo "Merchant info...<br/>";
}
}
Изменения:
- Используйте bindParam для установки значений (если вы используете PDO, этолучше использовать его или bindValue).
- Сделайте только один подготовленный оператор для его оптимизации, а не один для каждой итерации.
- Remove ';'из руководства sql, php говорят, что предложение sql должно быть без него.
Я не могу комментировать, потому что я сделал новый ответ вместо комментария или отредактировал ответ Луи.