colon = strchr(data_source, ':');
if (!colon) {
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_SYNTAX TSRMLS_CC, "invalid data source name");
- ZVAL_NULL(object);
- return;
+ /* let's see if this string has a matching dsn in the php.ini */
+ char *ini_dsn = NULL;
+
+ snprintf(alt_dsn, sizeof(alt_dsn), "pdo.dsn.%s", data_source);
+ if (FAILURE == cfg_get_string(alt_dsn, &ini_dsn)) {
+ zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_SYNTAX TSRMLS_CC, "invalid data source name");
+ ZVAL_NULL(object);
+ return;
+ }
+
+ data_source = ini_dsn;
+ colon = strchr(data_source, ':');
+
+ if (!colon) {
+ zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_SYNTAX TSRMLS_CC, "invalid data source name (via INI: %s)", alt_dsn);
+ ZVAL_NULL(object);
+ return;
+ }
}
if (!strncmp(data_source, "uri:", sizeof("uri:")-1)) {