【问题标题】:Where to find out if a function exists?在哪里可以找到函数是否存在?
【发布时间】:2013-06-18 12:43:56
【问题描述】:

我正在尝试从上一个查询中提取一个自动递增的 id。我收到异常:1305 FUNCTION 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);
    }
    

【问题讨论】:

  • MySQL 原生函数称为LAST_INSERT_ID()。它的 MySQLi 包装器是 mysqli_last_insert_id()。 PDO 版本为$pdo->lastInsertId()。您正在做的是为该函数调用 PHP 的包装器。只需调用 MySQL 一个 (LAST_INSERT_ID())。
  • 当心!您的代码看起来可能容易受到 SQL 注入攻击。看起来您好像没有正确地转义 $_POST['skills']
  • 容易受到SQL injection attacks的影响,你应该自己defend
  • ".$mysqli->insert_id."
  • 技能帖来自一个预填充的 html 下拉菜单,因此只能下拉胡萝卜。

标签: php mysql database mysqli


【解决方案1】:

根据您的代码:

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

请注意,mysqli_insert_id() 与所有其他 mysqli 函数一样需要您指定数据库连接变量。

我注意到您的大部分代码都使用 mysqli 的 OO 语法,这意味着连接变量被指定为对象名称。对于这里的mysqli_insert_id(),您使用过程语法调用它,在这种情况下,您必须将连接变量指定为第一个参数。

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

这应该可以解决问题。

【讨论】:

    【解决方案2】:

    好吧,您正试图在 SQL 查询中使用 PhP 函数...它不起作用!

    这里稍微解释一下如何在 PhP 中使用该函数:http://www.w3schools.com/php/func_mysqli_insert_id.asp

    【讨论】:

    • 我没有对你投反对票,因为你的答案或多或少是正确的,但你之所以投反对票,是因为你链接了 w3schools,这可能是最差的在线资源..
    • @N.B. :我知道 w3schools 不值得信任,但这里他们给出的简短示例似乎是正确的,因此链接。无论如何,Spudley 的回答比我的要好得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多