Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lỗi khi gọi thủ tục được lưu trữ MySQL thông qua PHP

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();
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách đặt đồng hồ đếm ngược để không đặt lại khi làm mới trang

  2. Làm cách nào để đặt giá trị mặc định của MySQL enum datatype là 'Không'?

  3. Ngăn chặn cảnh báo MySQL?

  4. Cách chọn Phạm vi hàng dựa trên giá trị trường - MySQL

  5. Câu lệnh hợp nhất có sẵn trong MySQL không