【问题标题】:unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in PHP MYSQL [duplicate]PHP MYSQL中的意外''(T_ENCAPSED_AND_WHITESPACE),期望标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)[重复]
【发布时间】:2015-06-26 07:40:01
【问题描述】:

运行代码时出现上述错误。请告诉我哪里出错了。

我正在尝试获取这些值并使用 JSON 对其进行编码并将它们保存到数据库中。然后稍后我将从数据库中检索数据,对其进行解码,然后将其发送到客户端。 以下是我的php代码。

    <?php

    $name = $_POST['fname']; 
    $email = $_POST['email'];
    $comment =$_POST['comment'];
    $website = $_POST ['website'];
    $rate = $_POST['rate'];


    $conn = mysqli_connect("localhost","root","","webtech");
    if(!$conn){
        die("Connection Failed : ".mysqli_connect_error());
    } else{
        echo "Connection Succesful ";
    }

    $jsonDb = array
    (
        'name' => $name,
        'email'=> $email,
        'comment'=> $comment,
        'website'=> $website,
        'rate'=> $rate 
        );

    $jsonArray = array
    (
        'name' => $name,
        'email'=> $email,
        'comment'=> $comment,
        'website'=> $website,
        'rate'=> $rate
         );

$encodeDatabase = json_encode($jsonDb);


$encodeArray = json_encode($jsonArray);
mysql_query("INSERT INTO comments VALUES ("."'".$jsonDb['name']."'"."," ."'".$jsonDb['email']."'".","."'".$jsonDb['website']."'".","."'".$jsonDb['comment']."'".","."'".$jsonDb['rate']."'".")");

    echo $encodeDatabase;




?>

【问题讨论】:

  • mysqli_connect(), 但mysql_query() ?
  • 错误指向哪一行?

标签: javascript php mysql ajax mysqli


【解决方案1】:

您已使用mysqli 连接数据库,但您正在使用mysql_query() 执行插入查询。

请使用mysqli_query() 而不是mysql_query() 来执行插入查询。

【讨论】:

  • 不是导致错误的原因,即使是真的
  • 您不能将 mysql_* 命令与 mysqli_* 命令混合使用,即使这不是唯一的错误。
【解决方案2】:
mysql_query("INSERT INTO comments VALUES ('$jsonDb[name]','$jsonDb[email]','$jsonDb[website]','$jsonDb[comment]','$jsonDb[rate]')");

它应该是这样的。

【讨论】:

  • 使用字符串数组键而不引用它们会产生不必要的 E_NOTICE。另一种选择是使用花括号进行插值,所以不是'$jsonDb[name]',而是'{$jsonDb['name']}'。另请注意,在 mysqli_ 连接后使用 mysql_* 函数是错误的。更不用说这段代码容易受到sql注入。
【解决方案3】:

正如其他人指出的那样,在这种情况下,您需要使用 mysqli_query 而不是 mysql_query

更多建议:

  1. 在查询字符串中使用大字符串连接时,使用所有单引号和双引号会变得难以阅读并且容易出错。另一种选择是使用花括号进行插值,尽管这主要是一种风格选择:​​i>
"INSERT INTO comments VALUES ('{$jsonDb['name']}', '{$jsonDb['email']}', 
    '{$jsonDb['website']}', '{$jsonDb['comment']}', '{$jsonDb['rate']}')"
  1. 此代码易受 sql 注入攻击。与其使用字符串连接将变量插入数据库进行查询,不如使用prepared statements 更安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2012-03-23
    • 2017-04-08
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多