【问题标题】:ALTER TABLE Parse error: syntax error, unexpected T_STRING [closed]ALTER TABLE 解析错误:语法错误,意外的 T_STRING [关闭]
【发布时间】:2013-05-25 22:55:13
【问题描述】:

我有一点问题 这是我的代码 `

if(isset($_POST['delete']))
{
    $host="db1.xhost.ro"; // Host name 
    $username="supremesguild_01"; // Mysql username 
    $password="Blizzard951234"; // Mysql password 
    $db_name="supremesguild_xhost_ro01"; // Database name 
    $tbl_name="inventar"; // Table name 
    /*
    $host="localhost"; // Host name 
    $username="root"; // Mysql username 
    $password=""; // Mysql password 
    $db_name="acilogin"; // Database name 
    $tbl_name="inventar"; // Table name 
    */
    // Connect to server and select database.
    $con = mysql_connect($host, $username, $password)or die("cannot connect"); 


    // Get values from form
    $id=$_POST['id'];

    mysql_select_db($db_name, $con)or die("cannot select DB");

    // modify data into mysql
    $sql="DELETE FROM `$tbl_name` WHERE `ID` =$id LIMIT 1 ; ";
    $auto = "SELECT MAX(`ID`) FROM `$tbl_name`";
    ALTER TABLE $tbl_name AUTO_INCREMENT = $auto+1; //this is line 29

    $result=mysql_query($sql, $con)or die('Could not delete data: ' . mysql_error());;

    // if successfully insert data into database, displays message "Successful". 
    if($result){
        header("Location:http://supremesguild.xhost.ro/index.php?pagina=delete_success");
    }

    else {
        header("Location:http://supremesguild.xhost.ro/index.php?pagina=delete_failed");
    }
    mysql_close($con);
    mysql_close();
}

我得到这个错误:解析错误:语法错误,第 29 行 /home/www/free/xhost.ro/supremesguild.xhost.ro/delete.php 中的意外 T_STRING。 我试过了:ALTER TABLE "$tbl_name" AUTO_INCREMENT = $auto+1;EXEC(ALTER TABLE $tbl_name AUTO_INCREMENT = $auto+1;) 但它说 exec 出于安全目的已被禁用 我只想在每次删除后重置 AUTO_INCREMENT,有人可以帮我吗?

【问题讨论】:

  • 请注意,SELECT MAX(ID) FROM $tbl_name` 没有被执行,因为它没有被交给mysql_query。您要针对数据库运行的每条语句都必须通过 mysql_query 甚至更好的 mysqli_query 执行:stackoverflow.com/questions/8891443/…
  • 请查看 SQL-Injections (en.wikipedia.org/wiki/SQL_injection)。你必须在这里清理$_POST['id'] 以确保它是一个数字。例如像这样:$id = (int) $_POST['id']
  • 你可能想在那里编辑你的密码!

标签: php mysql alter-table


【解决方案1】:

你没看到什么可疑的地方吗?

$auto = "SELECT MAX(`ID`) FROM `$tbl_name`";
    ALTER TABLE $tbl_name AUTO_INCREMENT = $auto+1; //this is line 29
$result=mysql_query($sql, $con)or die('Could not delete data: ' . mysql_error());;

如果你没有,我会很难过,但既然你没有。

只需将您的查询更改为

$auto = "SELECT MAX(`ID`) FROM `$tbl_name` 
        ALTER TABLE $tbl_name AUTO_INCREMENT = $auto+1;

因为,$tbl_name; 实际上结束了您的查询,所以您不能在此之后继续说 ALTER TABLE $tbl_name AU,就像什么都没发生一样。

【讨论】:

  • 可能还使用带有语法高亮的 IDE(例如带有 PHP 开发工具的 Eclipse)。它可以帮助您立即发现此类错误...
  • @lorey 否。该查询实际上是由 ; 终止的。不是,我知道的任何 IDE 都会自己添加分号。
  • 不,你误会了。我的意思是任何带有语法高亮的 IDE 都会因为缺少高亮而几乎不可能不发现这个错误。这也是对他的额外建议。我在这里添加它是因为我认为您的答案是迄今为止最好的;)
  • 哦,在这种情况下你是对的。你有没有投票过 :P :) Op 似乎已经消失了
【解决方案2】:

ALTER TABLE 不是 PHP 命令。如果您希望此 SQL 查询在您的数据库中执行,您必须将其作为字符串参数发送到 mysql_query()

mysql_query("ALTER TABLE $tbl_name AUTO_INCREMENT = $auto+1;");

【讨论】:

    【解决方案3】:

    您需要将查询作为字符串放在" " 中。

    【讨论】:

      【解决方案4】:

      您应该非常小心地公开共享您的主机名、用户名和密码,因为现在每个人都可以访问您的数据库,只要他们找到正确的 URL 或知道您的主机服务器在哪里! 在您发布之前用虚假数据进行虚拟化是一个不错的建议。

      【讨论】:

        猜你喜欢
        • 2013-05-13
        • 1970-01-01
        • 2014-08-09
        • 2013-07-15
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多