MSSQL с двумя "?" PDOStatement :: execute (): SQLSTATE [HY093]: недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов - PullRequest
0 голосов
/ 17 января 2019

У меня ниже код работает с одинарным "?"

function get_db_link($hostname, $port, $dbname, $username, $pwd) {
    $link = new PDO("dblib:host=$hostname:$port;dbname=$dbname", "$username", "$pwd");
    if (!$link) {
         die ('Database not available. Please report this to the maintainer of this application.');
    }
    return $link;
}

function execute_sql ($sql, $link, $serial_array) {
    $sql_prep = $link->prepare($sql);
    $sql_prep->execute($serial_array);
    return $sql_prep;
}

$sql = "SELECT d.id, d.domain_name, d.default_admin_user, d.last_updatedby, alias, EPAID, t_serial, u.FNAME, u.EMAIL1 FROM domains d, users u, params p WITH (NOLOCK) WHERE d.id = u.domainID AND d.default_admin_user = u.ID AND p.domainID = d.id  AND p.serial = ?";

$my_serial = $_POST["serial"];
$link = get_db_link($hostname, $port, $dbname, $username, $pwd);       
$serial_arr[] = $my_serial;
$results = execute_sql($sql, $link, $serial_arr);
$result = $results->fetch();

Но когда я заменяю на sql ниже которого есть два "?" на "union all", я бегу к "PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens". Какие изменения мне нужно внести в мой php-код, чтобы он работал? Здесь БД - это MS SQL.

$sql = "SELECT d.id, d.domain_name , d.default_admin_user, d.last_updatedby, alias, EPAID, t_serial, u.FNAME , u.EMAIL1 FROM domains d, users u WITH (NOLOCK) WHERE d.id = u.domainID AND d.default_admin_user = u.ID AND d.t_serial = ? UNION ALL SELECT d.id, d.domain_name, d.default_admin_user, d.last_updatedby, alias, EPAID, t_serial, u.FNAME, u.EMAIL1 FROM domains d, users u, params p WITH (NOLOCK) WHERE d.id = u.domainID AND d.default_admin_user = u.ID AND p.domainID = d.id  AND p.serial = ?";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...