2013-06-18 43 views
0

我試圖從以前的查詢中拉出一個自動遞增的ID。我收到異常:1305功能THE_NAME_OF_MY_DATABASE.mysqli_insert_id不存在。哪裏可以找到函數是否存在?

  1. 這不能是一個語法錯誤是否正確?
  2. 我可以在哪裏修改mysql以具備此功能或需要重新設置的內容?我搜索了這個,發現混合的迴應。

    $action = isset($_POST['action']) ? $_POST['action'] : ""; 
    if($action == "create"){ 
    //write the query for character creation 
    
    $query = "(all of my stuff that I'm putting into another database that works)"; 
    
    $query1 = "INSERT INTO playerskill 
           (skillid, charid) 
    
           VALUES ('".$_POST['skills']."',mysqli_insert_id()); 
           "; 
    //what happens when successful or not 
    if($mysqli->query($query)) { 
        echo $query ; 
        echo "Character was approved."; 
    }else{ 
        echo "Database Error: Unable to update record."; 
        echo $mysqli->errno; 
        echo mysqli_error($mysqli); 
    } 
    } 
    
    //what happens when successful or not 
    if($mysqli->query($query1)) { 
        echo $query1 ; 
        echo "Character was approved."; 
    }else{ 
        echo "Database Error: Unable to update record."; 
        echo $mysqli->errno; 
        echo mysqli_error($mysqli); 
    } 
    
+3

MySQL本地函數被稱爲'LAST_INSERT_ID()'。 MySQLi對它的包裝是mysqli_last_insert_id()。 PDO版本是'$ pdo-> lastInsertId()'。你正在做的是調用PHP的包裝函數。只需調用MySQL一個(LAST_INSERT_ID())。 –

+1

當心!您的代碼看起來可能容易受到SQL注入攻擊。它看起來不像是正確地轉義'$ _POST ['skills']'。 – Spudley

+1

你很容易受到[SQL注入攻擊](http://bobby-tables.com/)**,你應該[防衛](http://stackoverflow.com/questions/60174/best-way-to -prevent-sql -injection-in-php)你自己。 – Quentin

回答

1

好吧,你想使用一個PHP函數到SQL查詢......那就不行!

下面是關於如何在PHP中使用該功能的一些解釋:http://www.w3schools.com/php/func_mysqli_insert_id.asp

+0

我沒有downvote你,因爲你的答案或多或少是正確的,但你得到這些downvotes因爲你聯繫w3schools,可能是最糟糕的資源在線任何東西.. –

+0

欲瞭解更多信息,請檢查[W3Fools](http:///www.w3fools.com)。 – budwiser

+0

@ N.B。:我知道w3schools不值得信賴,但這裏他們給出的簡短例子似乎是正確的,因此這個鏈接。無論如何,斯普德利的回答遠比我的好。 –

2

每代碼:

$query1 = "INSERT INTO playerskill (skillid, charid) 
      VALUES ('".$_POST['skills']."',mysqli_insert_id());"; 

注意mysqli_insert_id(),在共同與所有其他mysqli功能要求您指定DB連接變量。

我注意到,其餘大部分代碼都使用mysqli的OO語法,這意味着連接變量被指定爲對象名稱。如果是mysqli_insert_id(),則使用過程語法調用它,在這種情況下,必須將連接變量指定爲第一個參數。

所以,你需要或者mysqli_insert_id($mysql)$mysql->insert_id

這應該解決的問題。

相關問題