sql >> Database >  >> RDS >> Mysql

PHP Extraheer codes uit TextArea en geef door aan Mysql SELECT IN Query

Eerst over het patroon:

  • Je hebt geen capture-groepen nodig, gebruik gewoon \K om de wedstrijd met volledige tekenreeks te herstarten.
  • Ik gebruik '[^']*' op de eerste/lege enkelvoudige aanhalingstekens van uw invoertekenreeks voor het geval dat wat tekst die positie opvult.

Over uw vraag:

  • Het is onveilig. U mag om veiligheidsredenen niet rechtstreeks door gebruikers ingediende gegevens in een zoekopdracht invoegen.
  • Hier verklaringen gemaakt met ? tijdelijke aanduidingen worden gebruikt.
  • Omdat het aantal tijdelijke aanduidingen/params die moeten worden gebonden variabel zijn, is de convolutie van call_user_func_array() is vereist.
  • Ik heb ook bind_result() implemented geïmplementeerd om te helpen bij de verwerking van de resultatenset.

Niet-geteste code:

$_POST['newfeatured']="new myProduct('', 'bbc_609'),
new myProduct('', '35857'),";

if(preg_match_all("/new (?:my|featured)Product\('[^']*', '\K[^']*/",$_POST['newfeatured'],$prd_ids)){
    $params=$prd_ids[0];  // the fullstring matches
    $count=count($params);  // number of fullstring matches
    $csph=implode(',',array_fill(0,$count,'?'));  // comma-separated placeholders

    $query="SELECT A.productid, A.name, A.brand, B.code
            FROM product A
            INNER JOIN price B ON A.productid=B.productid
            WHERE A.productid IN ($csph);";

    $stmt=$mysqli->prepare($query);  // for security reasons

    array_unshift($params,str_repeat('s',$count));  // prepend the type values string
    $ref=[];  // add references
    foreach($params as $i=>$v){
        $ref[$i]=&$params[$i];  // pass by reference as required/advised by the manual
    }
    call_user_func_array([$stmt,'bind_param'],$ref);    

    $stmt->execute();
    $stmt->bind_result($id,$name,$brand,$code);
    while($stmt->fetch()){
        echo "Whatever you want to do with the results: $id, $name, $brand, $code\n";
    }
    $stmt->close();
}else{
    echo "bonk";
}



  1. CDC inschakelen op een reeks tabellen OF inschakelen op alle tabellen in een database in SQL Server - SQL Server-zelfstudie

  2. 7 manieren om alle tabellen te retourneren met een primaire sleutel in SQL Server

  3. Sql Server Service Broker

  4. Hoe dood ik alle processen in Mysql show processlist?