PDO возвращает только один результат, ожидаемый путь больше - PullRequest
0 голосов
/ 25 апреля 2018

Для начала, может быть, я делаю это неправильно, поэтому будьте добры;)

Я должен сгенерировать свой SQL-запрос, зацикливаясь на массиве:

$sql = "SELECT data_mt_poids.Fap87, Type, Part, Info, Fap87_libcourt 
        FROM data_mt_poids 
            INNER JOIN lib_fap87 ON data_mt_poids.Fap87 = lib_fap87.Fap87   
        WHERE ";
$i = 1;

foreach($liste_territoire as $territoire)
{
    foreach($fap_array as $fap)
    {
        $sql .= "data_mt_poids.ZEFAP = ? OR ";
    }
}

$sql = substr($sql, 0, - 3);

$results = null;
try
{
    $conn = Db::getInstance();
    $stmt = $conn->prepare($sql);
    $i = 1;
    foreach($liste_territoire as $territoire)
    {
        foreach($fap_array as $fap)
        {
            $requested_zefap = $territoire.'-'.$fap;
            $stmt->bindParam($i, $requested_zefap);
            ++$i;
        }
    }

    $stmt->execute();
    $results = $stmt->fetchAll(PDO::FETCH_OBJ);
}
catch(PDOException $e)
{
    die("Error ".$e->getCode()." : ".$e->getMessage());
}

Есть 4 территориии 2 FAP

Я зарегистрировал запрос SQL, это нормально, на самом деле все мне кажется нормальным: /

Это возвращает только последний возможный результат (последний $ территория- $ фаппара)

И это произошло только тогда, когда я использую подготовленный запрос: /

Вот debugDumpParams ():

SQL: [361] SELECT data_mt_poids.Fap87, Type, Part, Info, Fap87_libcourt FROM data_mt_poids INNER JOIN lib_fap87 ON data_mt_poids.Fap87 = lib_fap87.Fap87 WHERE data_mt_poids.ZEFAP = ? OR data_mt_poids.ZEFAP = ? OR data_mt_poids.ZEFAP = ? OR data_mt_poids.ZEFAP = ? OR data_mt_poids.ZEFAP = ? OR data_mt_poids.ZEFAP = ? OR data_mt_poids.ZEFAP = ? OR data_mt_poids.ZEFAP = ? 
Params:  8
Key: Position #0:
paramno=0
name=[0] ""
is_param=1
param_type=2
Key: Position #1:
paramno=1
name=[0] ""
is_param=1
param_type=2
Key: Position #2:
paramno=2
name=[0] ""
is_param=1
param_type=2
Key: Position #3:
paramno=3
name=[0] ""
is_param=1
param_type=2
Key: Position #4:
paramno=4
name=[0] ""
is_param=1
param_type=2
Key: Position #5:
paramno=5
name=[0] ""
is_param=1
param_type=2
Key: Position #6:
paramno=6
name=[0] ""
is_param=1
param_type=2
Key: Position #7:
paramno=7
name=[0] ""
is_param=1
param_type=2

Заранее благодарен за помощь;)

1 Ответ

0 голосов
/ 25 апреля 2018

Используйте bindValue () вместо bindParam ().

Это потому, что bindParam () связывает переменную как ссылку и будет оцениваться только при вызове execute () - см. Руководство по PHP для bindParam и bindValue

...