php-sqlsrv/test/functional/sqlsrv/TC34_PrepAndExec.phpt

119 lines
3.3 KiB
Plaintext
Raw Normal View History

2017-05-04 01:00:31 +02:00
--TEST--
Prepare and Execute Test
--DESCRIPTION--
Checks the data returned by a query first prepared and then executed multiple times.
Validates that a prepared statement can be successfully executed more than once.
--ENV--
PHPT_EXEC=true
--SKIPIF--
<?php
require('skipif_versions_old.inc');
?>
2017-05-04 01:00:31 +02:00
--FILE--
<?php
require_once('MsCommon.inc');
2017-05-04 01:00:31 +02:00
2017-10-11 01:54:20 +02:00
function prepareAndExecute($noPasses)
2017-05-04 01:00:31 +02:00
{
setup();
if (useUTF8Data()) {
$conn1 = AE\connect(array('CharacterSet'=>'UTF-8'));
} else {
$conn1 = AE\connect();
}
2017-05-04 01:00:31 +02:00
$tableName = 'TC34test';
AE\createTestTable($conn1, $tableName);
AE\insertTestRows($conn1, $tableName, 1);
2017-05-04 01:00:31 +02:00
$values = array();
$fieldlVal = "";
// Prepare reference values
trace("Execute a direct SELECT query on $tableName ...");
$stmt1 = AE\selectFromTable($conn1, $tableName);
2017-05-04 01:00:31 +02:00
$numFields1 = sqlsrv_num_fields($stmt1);
sqlsrv_fetch($stmt1);
for ($i = 0; $i < $numFields1; $i++) {
if (useUTF8Data()) {
2017-05-04 01:00:31 +02:00
$fieldVal = sqlsrv_get_field($stmt1, $i, SQLSRV_PHPTYPE_STRING('UTF-8'));
} else {
2017-05-04 01:00:31 +02:00
$fieldVal = sqlsrv_get_field($stmt1, $i, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR));
}
if ($fieldVal === false) {
fatalError("Failed to retrieve field $i", true);
2017-05-04 01:00:31 +02:00
}
$values[$i] = $fieldVal;
}
sqlsrv_free_stmt($stmt1);
trace(" $numFields1 fields retrieved.\n");
2017-05-04 01:00:31 +02:00
// Prepare once and execute several times
trace("Prepare a SELECT query on $tableName ...");
2017-10-11 01:54:20 +02:00
$stmt2 = prepareQuery($conn1, "SELECT * FROM [$tableName]");
2017-05-04 01:00:31 +02:00
$numFields2 = sqlsrv_num_fields($stmt2);
trace(" $numFields2 fields expected.\n");
if ($numFields2 != $numFields1) {
setUTF8Data(false);
2017-05-04 01:00:31 +02:00
die("Incorrect number of fields: $numFields2");
}
for ($j = 0; $j < $noPasses; $j++) {
trace("Executing the prepared query ...");
2017-05-04 01:00:31 +02:00
sqlsrv_execute($stmt2);
sqlsrv_fetch($stmt2);
for ($i = 0; $i < $numFields2; $i++) {
if (useUTF8Data()) {
2017-05-04 01:00:31 +02:00
$fieldVal = sqlsrv_get_field($stmt2, $i, SQLSRV_PHPTYPE_STRING('UTF-8'));
} else {
2017-05-04 01:00:31 +02:00
$fieldVal = sqlsrv_get_field($stmt2, $i, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR));
}
if ($fieldVal === false) {
fatalError("Failed to retrieve field $i");
2017-05-04 01:00:31 +02:00
}
if ($values[$i] != $fieldVal) {
setUTF8Data(false);
2017-05-04 01:00:31 +02:00
die("Incorrect value for field $i at iteration $j");
}
}
trace(" $numFields2 fields verified.\n");
2017-05-04 01:00:31 +02:00
}
sqlsrv_free_stmt($stmt2);
dropTable($conn1, $tableName);
2017-05-04 01:00:31 +02:00
sqlsrv_close($conn1);
}
// locale must be set before 1st connection
2018-01-02 23:42:08 +01:00
setUSAnsiLocale();
$testName = "Statement - Prepare and Execute";
// test ansi only if windows or non-UTF8 locales are supported (ODBC 17 and above)
startTest($testName);
if (isLocaleSupported()) {
try {
setUTF8Data(false);
prepareAndExecute(5);
} catch (Exception $e) {
echo $e->getMessage();
}
}
endTest($testName);
// test utf8
startTest($testName);
2017-10-11 01:54:20 +02:00
try {
setUTF8Data(true);
2018-01-04 17:53:20 +01:00
resetLocaleToDefault();
2017-10-11 01:54:20 +02:00
prepareAndExecute(5);
} catch (Exception $e) {
echo $e->getMessage();
}
endTest($testName);
2017-05-04 01:00:31 +02:00
?>
--EXPECT--
Test "Statement - Prepare and Execute" completed successfully.
Test "Statement - Prepare and Execute" completed successfully.