Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd podczas wywoływania procedury składowanej MySQL przez PHP

Zakładam, że pierwszym argumentem twojej procedury składowanej jest VARCHAR, więc pierwszym problemem jest to, że przekazujesz $q zmienna bez cudzysłowów w zapytaniu. Powinno być tak:

$db->multi_query("CALL mst2('$q', @eset, @leng); SELECT @eset as eset; SELECT @leng as length");

Ponadto nie musisz wykonywać dwóch wywołań SELECT, zrób to tylko raz:

SELECT @eset AS eset, @leng AS leng;

Nie trzeba dodawać, że nigdy nie należy ufać danym wprowadzanym przez użytkownika. Powinieneś użyć przygotowanych wyciągów:

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. Połączenia MySQL:wybór tabeli do dołączenia na podstawie danych tabeli źródłowej

  2. MYSQL Jak dopasować dwa słowa w zdaniu

  3. Składnia MYSQL nie jest oceniana nie równa się w obecności NULL

  4. MySQLdb.cursor.execute nie może uruchamiać wielu zapytań

  5. Jak połączyć się z MySQL za pomocą PHP