Updated pdo_sqlsrv_get_driver_methods as per documentation (#1259)
This commit is contained in:
parent
3bc0624dad
commit
7313fa0c8b
|
@ -1574,12 +1574,13 @@ pdo_sqlsrv_function_entry *pdo_sqlsrv_get_driver_methods( _Inout_ pdo_dbh_t *dbh
|
|||
PDO_LOG_DBH_ENTRY;
|
||||
|
||||
sqlsrv_conn* driver_conn = reinterpret_cast<sqlsrv_conn*>( dbh->driver_data );
|
||||
SQLSRV_ASSERT( driver_conn != NULL, "pdo_sqlsrv_get_driver_methods: driver_data object was NULL." );
|
||||
CHECK_CUSTOM_ERROR( true, driver_conn, PDO_SQLSRV_ERROR_FUNCTION_NOT_IMPLEMENTED ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return NULL; // to avoid a compiler warning
|
||||
// As per documentation, simply return false if the method does not exist
|
||||
// https://www.php.net/manual/en/function.is-callable.php
|
||||
// But user can call PDO::errorInfo() to check the error message if necessary
|
||||
CHECK_CUSTOM_WARNING_AS_ERROR(true, driver_conn, PDO_SQLSRV_ERROR_FUNCTION_NOT_IMPLEMENTED);
|
||||
|
||||
return NULL; // return NULL for PDO to take care of the rest
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
50
test/functional/pdo_sqlsrv/pdo_1258_is_callable_error.phpt
Normal file
50
test/functional/pdo_sqlsrv/pdo_1258_is_callable_error.phpt
Normal file
|
@ -0,0 +1,50 @@
|
|||
--TEST--
|
||||
GitHub issue 1258 - is_callable() throws an exception if PDOStatement method does not exist
|
||||
--DESCRIPTION--
|
||||
The test shows is_callable() will return false if PDOStatement method does not exist instead of throwing an exception. The user can still check errorInfo() for the error message. See documentation https://www.php.net/manual/en/function.is-callable.php
|
||||
--ENV--
|
||||
PHPT_EXEC=true
|
||||
--SKIPIF--
|
||||
<?php require('skipif.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("MsSetup.inc");
|
||||
require_once("MsCommon_mid-refactor.inc");
|
||||
|
||||
try {
|
||||
$conn = connect();
|
||||
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
$stmt = $conn->prepare("SELECT @@Version");
|
||||
$functionExists = is_callable([$stmt, 'bindParam'], false, $callable);
|
||||
var_dump($functionExists);
|
||||
var_dump($callable);
|
||||
|
||||
$functionExists = is_callable([$stmt, 'boo']);
|
||||
var_dump($functionExists);
|
||||
|
||||
echo PHP_EOL . "Error INFO:" . PHP_EOL;
|
||||
var_dump($conn->errorInfo());
|
||||
|
||||
echo "Done\n";
|
||||
} catch (PdoException $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
string(23) "PDOStatement::bindParam"
|
||||
bool(false)
|
||||
|
||||
Error INFO:
|
||||
array(3) {
|
||||
[0]=>
|
||||
string(5) "IMSSP"
|
||||
[1]=>
|
||||
int(-58)
|
||||
[2]=>
|
||||
string(48) "This function is not implemented by this driver."
|
||||
}
|
||||
Done
|
||||
|
Loading…
Reference in a new issue