В циклическом наборе результатов отображается дополнительный тег br - PullRequest
0 голосов
/ 04 июля 2018

Я очень новичок в PHP и PDO и занимался извлечением записей из простой базы данных. Я создал и сумел успешно это сделать, но по какой-то странной причине, когда я fetchAll() своих записей и добавляю тег <br> в оператор echo, он добавляет дополнительный <br> в случайной позиции в моем выход. Я не уверен, почему это происходит. Это из-за лишних пробелов в моей БД?

Я пытался найти решение в Интернете и другие темы на SO; возможно я не ищу подходящее место для моей проблемы.

У меня ощущение, что это проблема с пробелами, и, возможно, мне нужно использовать trim для этого?

Вот мой код:

// Set all fetch requests as an object by default
$dbo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

$admin = 'ADMIN';
$adminLive = 'ADMIN-live';
$adminType = 'ADMIN_US_Type';
$customusDomestic = 'US_domestic';
$adminChina = 'China_admin';
$adminIndia = 'India_admin';
$adminCustom = 'ADMIN_custom';
$customusaustinCulver = 'US_Austin_Culver';
$customuschinaTokyo = 'US_China_Tokyo';
$customcorkuaeBayarea = 'Cork_UAE_BayArea';
$customchinashanghaiBeijing = 'China_Shanghai_Beijing';
$adminselfMoves = 'ADMIN_selfmoves';
$adminmilanVienna = 'ADMIN-milan-vienna';
$custombayareaSeattle = 'Bayarea_Seattle_admin';

// Prepare the query
$sql = 'SELECT DISTINCT usergroup
        FROM plus_signup
        WHERE usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?
        AND usergroup != ?';

$stmt = $dbo->prepare($sql);

// Execute the query
$stmt->execute([$admin,$adminLive,$adminType,$customusDomestic,$adminChina,$adminIndia,$adminCustom,$customusaustinCulver,$customuschinaTokyo,$customcorkuaeBayarea,$customchinashanghaiBeijing,$adminselfMoves,$adminmilanVienna,$custombayareaSeattle]);

$usergroups = $stmt->fetchAll();
foreach($usergroups as $locations) {

     // This works fine but my output is adding an extra br in some occurances of the loop
    echo $locations->usergroup . "<br/>";

}

Вывод в браузере, который я получаю

1 Ответ

0 голосов
/ 04 июля 2018

Не проверено, но логика должна звучать правдоподобно:

$dbo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);  // fetch as indexed array
$dbo->setAttribute(PDO::NULL_TO_STRING: NULL);                     // nulls to empty strings

$nots = [
    '', 
    $admin,
    $adminLive,
    $adminType,
    $customusDomestic,
    $adminChina,
    $adminIndia,
    $adminCustom,
    $customusaustinCulver,
    $customuschinaTokyo,
    $customcorkuaeBayarea,
    $customchinashanghaiBeijing,
    $adminselfMoves,
    $adminmilanVienna,
    $custombayareaSeattle
];

$placeholders = implode(',', array_fill(0, count($nots), '?'));

$sql = "SELECT DISTINCT usergroup FROM plus_signup WHERE usergroup NOT IN ($placeholders)";
try {
    $stmt = $dbh->prepare($sql);
    $stmt->execute($nots);
    $usergroups = $stmt->fetchAll();
    echo implode('<br>', $usergroups);
} catch (PDOException $e) {
    echo $e->getMessage();  // not to be shown publicly
}

Это должно исключить ваши пустые / нулевые значения как часть набора результатов.

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