<?php 
declare(strict_types=1); 
 
namespace ParagonIE\EasyDB\Tests; 
 
use PDOStatement; 
 
/** 
 * Class ExecTest 
 * @package ParagonIE\EasyDB\Tests 
 */ 
class QuoteThenQueryTest extends EasyDBWriteTest 
{ 
 
    /** 
     * @dataProvider goodFactoryCreateArgument2EasyDBInsertManyProvider 
     * @depends      ParagonIE\EasyDB\Tests\QuoteTest::testQuote 
     * @depends      ParagonIE\EasyDB\Tests\EscapeIdentifierTest::testEscapeIdentifier 
     * @depends      ParagonIE\EasyDB\Tests\EscapeIdentifierTest::testEscapeIdentifierThrowsSomething 
     * @param callable $cb 
     * @param array $maps 
     */ 
    public function testQuery(callable $cb, array $maps) 
    { 
        $db = $this->easyDBExpectedFromCallable($cb); 
        $table = 'irrelevant_but_valid_tablename'; 
 
        $first = $maps[0]; 
 
        // Let's make sure our keys are escaped. 
        $keys = \array_keys($first); 
        foreach ($keys as $i => $v) { 
            $keys[$i] = $db->escapeIdentifier($v); 
        } 
 
        foreach ($maps as $params) { 
            $queryString = "INSERT INTO " . $db->escapeIdentifier($table) . " ("; 
 
            // Now let's append a list of our columns. 
            $queryString .= \implode(', ', $keys); 
 
            // This is the middle piece. 
            $queryString .= ") VALUES ("; 
 
            // Now let's concatenate the ? placeholders 
            $queryString .= \implode( 
                ', ', 
                \array_map( 
                    function ($val) use ($db) { 
                        return $db->quote($val); 
                    }, 
                    $params 
                ) 
            ); 
 
            // Necessary to close the open ( above 
            $queryString .= ");"; 
 
            $this->assertInstanceOf(PDOStatement::class, $db->query($queryString)); 
        } 
    } 
} 
 
 |