Предложение WHERE с массивом PHP-MYSQL


Я следующий код, но не работает, и я не вижу ошибки. Мне нужно отобразить все 3 линии (123), которые находятся в $fetch['list_carac'].

<?php
include 'conect.php';

$sql = "SELECT list_carac FROM select_carac WHERE id_produto = 1";
$exec = $con->query( $sql ) or exit( $con->error );
$fetch = mysqli_fetch_assoc($exec); 
$fetch = str_replace( ",", "", $fetch);

echo($fetch['list_carac']);//aqui a saída é 123

foreach($fetch as $value){

$sql =  "SELECT nome_carac FROM carac WHERE id_carac = $value";

$exec = $con->query( $sql ) or exit( $con->error );

$row = mysqli_fetch_assoc($exec);

echo $row["nome_carac"];
}
?>

Если я сниму foreach и добавить id вручную, он возвращает мне запись, которая находится в поле nome_carac. В противном случае он не дает ошибку , но показывает только 1 выходecho($fetch['list_carac']);//aqui a saída é 123.

 1
Author: MagicHat, 2016-07-06

1 answers

, уверены Ли вы, что в БД, всегда с запятыми просто так:

$sql = 'SELECT nome_carac FROM carac WHERE id_carac IN ('.$lista.')';

Применяется к вашему коду:

<?php
    include 'conect.php';

    $sql = 'SELECT list_carac FROM select_carac WHERE id_produto = 1';
    $exec = $con->query( $sql ) or die( $con->error );
    $fetch = mysqli_fetch_assoc($exec); 

    $lista = mysqli_real_escape_string( $con, $fetch['list_carac'] );
    $sql = 'SELECT nome_carac FROM carac WHERE id_carac IN ( '.$lista.')';
    $exec = $con->query( $sql ) or exit( $con->error );

    while( $row = mysqli_fetch_assoc($exec) ){ 
       echo $row["nome_carac"];
    }
?>

Конечном Итоге, если список не только цифрой, нужно немного санитарной (с кавычками):

    $caracteres = explode( ',', $fetch['list_carac'] );
    foreach( $caracteres as $caractere ) {
        $lista .= "'".mysqli_real_escape_string( $con, $caractere )."',";
    }
    $lista = rtrim( $lista, "," );
 2
Author: Bacco, 2016-07-06 22:06:03