PHP SQLSRV_PREPARE und SQLSRV-EXECUTE

EuroCent

Klappstuhl 2.0
Hallo und Guten Morgen miteinander!

Ich sitze vor folgender Frage:
Ich habe eine SQl-Anweisung:
SQL:
SELECT TOP 50 * FROM [dbo].[table_x] WHERE ([email] LIKE :email OR [firstname] LIKE :firstname OR [lastname] LIKE :lastname OR [username] LIKE :username OR [userid] LIKE :userid OR [position] LIKE :position)

mittels Array vesuche Ich die ":email etc..." entsprechend zu ersetzen:
PHP:
$suche = isset($_REQUEST['suche']) ? $_REQUEST['suche'] : "";
$params = array(":email" => "%{$suche}%", ":firstname" => "%{$suche}%", ":lastname" => "%{$suche}%", ":username" => "%{$suche}%", ":userid" => "%{$suche}%", ":position" => "%{$suche}%");

Führe Ich dies weiter fort:
PHP:
$mainPage = new Page();
$mainPage->setConnection($con);
$msconnect = $mainPage->msconnect_srv;

$stmt = sqlsrv_prepare($msconnect, $sql, $params);

if (!$stmt) {
    printf('<pre>1: %s</pre>', print_r(sqlsrv_errors(), true));
}

$res = sqlsrv_execute($stmt);

if (!sqlsrv_execute($stmt)) {
    printf('<pre>2: %s</pre>', print_r(sqlsrv_errors(), true));
}

Bekomme Ich diese Ausgabe:
Code:
2: Array
(
    [0] => Array
        (
            [0] => 42000
            [SQLSTATE] => 42000
            [1] => 102
            [code] => 102
            [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near ':'.
            [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near ':'.
        )

    [1] => Array
        (
            [0] => 42000
            [SQLSTATE] => 42000
            [1] => 8180
            [code] => 8180
            [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared.
            [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared.
        )

)

Meine Frage dazu lautet: Wie kann Ich als Bezeichner in der SQL es so anweisen dass durch :email entsprechend an der Stelle der Paramenter gesetzt wird?

Wenn Ich mir die Beispiele auf php.net anschauen, arbeiten die nur mit "?".
Ist es an der Stelle auch nur so möglich?

Wenn Ich es so mache:
PHP:
$sql = "SELECT TOP 50 * FROM [dbo].[table_x] WHERE ([email] LIKE ? OR [firstname] LIKE ? OR [lastname] LIKE ? OR [username] LIKE ? OR [userid] LIKE ? OR [position] LIKE ?)";
$params = array("%{$suche}%", "%{$suche}%", "%{$suche}%", "%{$suche}%", "%{$suche}%", "%{$suche}%");

Dann funktioniert es auch.
 

Neue Beiträge

Zurück