summaryrefslogtreecommitdiff
path: root/ext/mysqli
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2008-07-23 14:07:38 +0000
committerAndrey Hristov <andrey@php.net>2008-07-23 14:07:38 +0000
commit24e7d03e489b99ef8e948adfaf491b8942649b01 (patch)
treeb1f12a08a2d954c0e48af0ad9f004d186989ccfc /ext/mysqli
parente5f38575897eb1ed01587b0a66add6b3a9fc62da (diff)
downloadphp-git-24e7d03e489b99ef8e948adfaf491b8942649b01.tar.gz
MFH: Fixed bug#44897 - failed to prepare statement
After a PS "CALL()" we have at least one result set. If the SP does also some, then we need to clean the wire more fool-proof.
Diffstat (limited to 'ext/mysqli')
-rw-r--r--ext/mysqli/tests/bug44897.phpt70
1 files changed, 70 insertions, 0 deletions
diff --git a/ext/mysqli/tests/bug44897.phpt b/ext/mysqli/tests/bug44897.phpt
new file mode 100644
index 0000000000..616e24ec41
--- /dev/null
+++ b/ext/mysqli/tests/bug44897.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Bug #44879 ( failed to prepare statement)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+require_once('connect.inc');
+if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
+ die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error()));
+}
+if (mysqli_get_server_version($link) <= 50000) {
+ die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($link)));
+}
+?>
+--FILE--
+<?php
+ require_once("connect.inc");
+ require_once("table.inc");
+
+ if (!$link->query('DROP PROCEDURE IF EXISTS p'))
+ printf("[001] [%d] %s\n", $link->errno, $link->error);
+
+ if (!$link->query('CREATE PROCEDURE p(IN new_id INT, IN new_label CHAR(1)) BEGIN INSERT INTO test(id, label) VALUES (new_id, new_label); SELECT new_label; END;'))
+ printf("[002] [%d] %s\n", $link->errno, $link->error);
+
+ $new_id = 100;
+ $new_label = 'z';
+
+ if (!$stmt = $link->prepare('CALL p(?, ?)'))
+ printf("[003] [%d] %s\n", $link->errno, $link->error);
+
+ if (!$stmt->bind_param('is', $new_id, $new_label) || !$stmt->execute())
+ printf("[004] [%d] %s\n", $stmt->errno, $stmt->error);
+
+ $out_new_label = null;
+ if (!$stmt->bind_result($out_new_label) || !$stmt->fetch())
+ printf("[005] [%d] %s\n", $stmt->errno, $stmt->error);
+
+ if ($out_new_label != $new_label)
+ printf("[006] IN value and returned value differ. Expecting %s/%s got %s/%s\n",
+ $new_label, gettype($new_label), $out_new_label, gettype($out_new_label));
+
+ $stmt->close();
+
+ $stmt2 = $link->prepare('SELECT label FROM test WHERE id = ?');
+ if (!is_object($stmt2)) {
+
+ printf("[007] Failed to create new statement object\n");
+
+ } else {
+
+ if (!$stmt2->bind_param("i", $new_id) || !$stmt2->execute())
+ printf("[008] [%d] %s\n", $stmt2->errno, $stmt2->error);
+
+ $out_new_label = null;
+ if (!$stmt2->bind_result($out_new_label) || !$stmt2->fetch())
+ printf("[009] [%d] %s\n", $stmt2->errno, $stmt2->error);
+
+ if ($out_new_label != $new_label)
+ printf("[010] IN value and returned value differ. Expecting %s/%s got %s/%s\n",
+ $new_label, gettype($new_label), $out_new_label, gettype($out_new_label));
+
+ }
+
+ $link->close();
+
+ print "done!";
+?>
+--EXPECTF--
+done!