第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 PHP 使用 LIMIT 調(diào)用參數(shù)化 MariaDB SP 時出現(xiàn)問題

使用 PHP 使用 LIMIT 調(diào)用參數(shù)化 MariaDB SP 時出現(xiàn)問題

PHP
慕慕森 2021-10-15 10:31:40
我一直被這個難住了,在任何地方都找不到工作示例或教程。給定以下存儲過程:SQLdelimiter $$CREATE PROCECURE sp1(IN 'myoffset' INT, IN 'myrows' INT)beginselect * from t1limit 'myoffset', 'myrows'END$$delimiter我正在嘗試從 PHP 調(diào)用它,如下所示:... 建立 $conn,然后PHP// ver1:$sql = ( "SET @p0 = $tmp1;" . " SET @p1 = $tmp2;" . " CALL `sp1`(@p0, @p1);" );//OR    //ver2$sql = "SET @p0 = `$tmp1`; SET @p1 = `$tmp2`; CALL `sp1`(@p0, @p1);";$result = mysqli_query($conn, $sql);一個都不行。MariaDB 抱怨說“錯誤描述:您的 SQL 語法有錯誤;請檢查與您的 MariaDB 服務(wù)器版本相對應(yīng)的手冊,以獲取在第 2 行的'SET @p1 = 25; CALL sp1(@p0, @p1)'附近使用的正確語法”任何幫助將非常感激!
查看完整描述

1 回答

?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個贊

什么在$tmp1?

如果它是一個數(shù)字,那么第一個應(yīng)該可以工作,但第二個沒有意義,因?yàn)樗兂闪?/p>

SET @p0 = `1234`;

我假設(shè)沒有名為1234? 請記住,反引號用于列、表和數(shù)據(jù)庫名稱。

如果 $tmp 是 string "a string",那么你得到

SET @p0 = a string;  -- strings need to be quoted here

或者

SET @p0 = `a string`;  -- again that is treated as a column (etc) name.

之后,您還有另一個問題:不要將多個語句組合在一起(以 分隔;);分別運(yùn)行它們。

最后,不需要@p0等:

$sql = "CALL `sp1`('$tmp1', '$tmp2')";

足夠了。

嗯,不完全是。如果 $tmps 的值來自外部世界,請參閱可怕的“SQL 注入”問題。

哦,如果

$tmp1 = "Don't do this";

然后你得到

$sql = "CALL `sp1`('Don't do this', '$tmp2')";

看單引號。其中有3個。這將如何解析?


查看完整回答
反對 回復(fù) 2021-10-15
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號