sql >> データベース >  >> RDS >> Mysql

PHPがTextAreaからコードを抽出し、Mysqlに渡すSELECT IN Query

    最初にパターンについて:

    • キャプチャグループは必要ありません。\Kを使用するだけです。 フルストリングマッチを再開します。
    • '[^']*'を使用します 一部のテキストがその位置を埋める場合に備えて、入力文字列の最初の/空の単一引用符付きコンポーネント。

    クエリについて:

    • 安全ではありません。セキュリティ上の理由から、ユーザーが送信したデータをクエリに直接挿入しないでください。
    • ここに?を含むプリペアドステートメントがあります プレースホルダーが使用されます。
    • バインドされるプレースホルダー/パラメーターの数は可変であるため、call_user_func_array()の畳み込み が必要です。
    • bind_result()も実装しました 結果セットの処理を支援します。

    テストされていないコード:

    $_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. SQL Serverのすべてのデータベースのすべてのテーブルを単一の結果セットに一覧表示するにはどうすればよいですか?

    2. MySQL --mysqldump --routinesは、すべてのルーチンではなく、1つのストアドプロシージャ(名前)のみをエクスポートします

    3. プロパティファイルの例からJDBC構成をロードする方法

    4. テーブル内の同じ列値のペアをチェックするためのSQLクエリは何になりますか?