У меня ниже код работает с одинарным "?"
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 = ?";