Category
stdlib
Problem
The MySQL improved extension (mysqli_* procedural API + mysqli class) is absent from ext/. Web stacks, WordPress-style apps, and test harnesses expect mysqli_connect(), mysqli_query(), and result fetching. Today:
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/vm.php -r "var_export(function_exists(\"mysqli_connect\"));"'
# bool(false)
php-src reference
Repro (failure today)
test/repro/maintainer_mysqli_connect.php:
<?php
var_export(function_exists('mysqli_connect'));
echo "\n";
var_export(class_exists('mysqli'));
echo "\n";
$mysqli = @mysqli_connect('127.0.0.1', 'root', '', 'test', 3306);
if (false === $mysqli) {
echo 'connect_fail:', mysqli_connect_errno(), ':', mysqli_connect_error(), "\n";
exit(0);
}
mysqli_query($mysqli, 'SELECT 1 AS n');
$r = mysqli_fetch_assoc(mysqli_query($mysqli, 'SELECT 1 AS n'));
var_export($r);
echo "\n";
mysqli_close($mysqli);
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php test/repro/maintainer_mysqli_connect.php # Zend (if ext/mysqli + server)
php bin/vm.php test/repro/maintainer_mysqli_connect.php 2>&1 | head -3
'
| Runtime |
function_exists |
Query result |
| Zend + MariaDB |
true |
array('n' => '1') |
bin/vm.php |
false |
Call to undefined function mysqli_connect() |
Scope (v1 subset — this repo)
| Piece |
Path |
Notes |
| Module |
ext/mysqli/Module.php |
Register procedural + mysqli class |
| Connection |
ext/mysqli/mysqli_connect.php, mysqli_close.php |
Thin wrapper over libmysqlclient / mariadb FFI |
| Query |
ext/mysqli/mysqli_query.php, mysqli_fetch_assoc.php |
Buffered result set v1 |
| Errors |
mysqli_connect_errno(), mysqli_connect_error() |
Match Zend strings |
| Resource |
VM TYPE_RESOURCE or dedicated link object |
Mirror #3367 PDO pattern |
| Tests |
test/compliance/cases/stdlib/mysqli_select1.phpt |
Skip when MYSQLI_TEST_DSN unset |
| JIT/AOT |
VM-only v1 |
Document deferral in matrix |
Phase 2 (separate issues): mysqli_prepare / mysqli_stmt_*, mysqli_real_escape_string, mysqli_multi_query, mysqli_driver.
PHP-in-PHP: implement connection/query in ext/mysqli/*.php; C only for unavoidable libmysqlclient FFI.
Done when
Verification
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
export MYSQLI_TEST_DSN="mysqli://root@127.0.0.1/test"
vendor/bin/phpunit --filter mysqli_select1
'
Environment
- Compliance tests must
--SKIPIF-- when no MySQL/MariaDB (do not require DB in default ci-fast).
- Docker dev image may not ship
mysqld; document optional docker-compose service in PHPT header.
Links
Category
stdlibProblem
The MySQL improved extension (
mysqli_*procedural API +mysqliclass) is absent fromext/. Web stacks, WordPress-style apps, and test harnesses expectmysqli_connect(),mysqli_query(), and result fetching. Today:php-src reference
ext/mysqli/mysqli_api.c—mysqli_connect,mysqli_query,mysqli_fetch_assoc,mysqli_closeext/mysqli/mysqli.c—mysqliobject handlers,mysqli_object_get_connectionext/mysqli/mysqli_driver.c—mysqli_driverclass (phase 2)ext/mysqli/php_mysqli_structs.h— link status, result setsRepro (failure today)
test/repro/maintainer_mysqli_connect.php:function_existstruearray('n' => '1')bin/vm.phpfalseCall to undefined function mysqli_connect()Scope (v1 subset — this repo)
ext/mysqli/Module.phpmysqliclassext/mysqli/mysqli_connect.php,mysqli_close.phplibmysqlclient/mariadbFFIext/mysqli/mysqli_query.php,mysqli_fetch_assoc.phpmysqli_connect_errno(),mysqli_connect_error()TYPE_RESOURCEor dedicated link objecttest/compliance/cases/stdlib/mysqli_select1.phptMYSQLI_TEST_DSNunsetPhase 2 (separate issues):
mysqli_prepare/mysqli_stmt_*,mysqli_real_escape_string,mysqli_multi_query,mysqli_driver.PHP-in-PHP: implement connection/query in
ext/mysqli/*.php; C only for unavoidablelibmysqlclientFFI.Done when
function_exists('mysqli_connect')andclass_exists('mysqli')true on VMMYSQLI_TEST_DSNenv (documented in PHPT--SKIPIF--), repro printsarray('n' => '1')or'1'mysqli_connect_errno()non-zero; message non-empty (Zend subset)./script/ci-fast.sh --filter mysqli_select1green (skips without DSN)script/capability-matrix.phpVerification
Environment
--SKIPIF--when no MySQL/MariaDB (do not require DB in default ci-fast).mysqld; document optionaldocker-composeservice in PHPT header.Links