Tôi giả sử đối số đầu tiên của thủ tục được lưu trữ của bạn là VARCHAR, vì vậy vấn đề đầu tiên là bạn đang chuyển $q
biến không có dấu ngoặc kép trong truy vấn. Nó sẽ như thế này:
$db->multi_query("CALL mst2('$q', @eset, @leng); SELECT @eset as eset; SELECT @leng as length");
Ngoài ra, bạn không cần thực hiện hai cuộc gọi CHỌN, chỉ thực hiện một lần:
SELECT @eset AS eset, @leng AS leng;
Không cần phải nói rằng đầu vào của người dùng không bao giờ được tin cậy. Bạn nên sử dụng các câu lệnh đã chuẩn bị sẵn:
if (($stmt = $db->prepare("CALL mst2(?, @eset, @leng)"))) {
$stmt->bind_param("s", $q);
$stmt->execute();
$stmt->close();
if (($res = $db->query("SELECT @eset AS eset, @leng AS leng"))) {
list($eset, $leng) = $res->fetch_array();
$result = $eset.$length;
echo $result;
$res->free();
}
}