【问题标题】:Parse error I can't figure out [closed]解析错误我无法弄清楚[关闭]
【发布时间】:2013-07-31 09:04:39
【问题描述】:

我已经盯着这个错误看了一个多小时了,我一辈子都看不出有什么问题。

这是我的错误:

解析错误:语法错误,第 42 行 C:\web\account.php 中出现意外的 '('

这是我在 html 中第一个 php 标记之后的代码(Line42 以“$searchstring”开头)。

<?php

include_once 'header.php';
include_once 'functions.php';
require_once 'login_users.php';

$db_server = mysql_connect($db_hostname, $db_username, $db_password);
if (!$db_server) die("Unable to connect to database:" . mysql_error());

mysql_select_db($db_database)
    or die("Unable to find database:" . mysql_error());

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="en-us" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Weapon Build Creator</title>

<link href="styles/main.css" rel="stylesheet" type="text/css" />

<style type="text/css">
.auto-style1 {
    margin-top: 0px;
}
</style>

</head>

<body style="background-image: url('images/bg.jpg')">

<div id="form" style="left: 50%">
<div class="newsdiv">
    <br />
    <p class="title">MY BUILDS</p>

<?php //search result table



   $searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons WHERE author="($_SESSION['username'])" "; // Line 42

$result = mysql_query($searchstring);

if (!$result) die ("Database access failed: " . mysql_error());

$rows = mysql_num_rows($result);

.... More code down here

如果你能看到请告诉我!

非常感谢!

【问题讨论】:

  • 第 42 行是什么?清楚地标记它。
  • @SteelyDan - 你有很多答案。您确实应该将答案标记为已接受:-)
  • 还没有人说过,所以我添加了强制性:php中的mysql函数是deprecated,所以请改用MySqliPDO。请使用parameterized queries。为了您自己的安全。
  • 错误信息准确地告诉您出了什么问题。它在第 42 行,在 account.php 中,意外字符(。该行只有一个左括号……这是出乎意料的……它导致了错误……

标签: php mysql


【解决方案1】:
$searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons WHERE author="($_SESSION['username'])" ";

应该是

$searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons WHERE author='" . $_SESSION['username'] . "'";

【讨论】:

  • 做到了。非常感谢。我没有意识到我必须在查询中使用单引号。
  • @SteelyDan - 不客气!这只是解决它的一种选择:-)
【解决方案2】:

您的 sql 中有未转义的引号。在双引号内使用单引号或使用dot 连接。

 $searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons WHERE author='($_SESSION['username'])'"; // i don't know why you used `(` to wrap username

 $searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons WHERE author='" . ($_SESSION['username']) . "'";

【讨论】:

    【解决方案3】:

    变化:

    $searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons WHERE author="($_SESSION['username'])" "; // Line 42
    

    收件人:

     $searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons WHERE author='".$_SESSION['username']."'"; // Line 42
    

    我做了什么?我已经删除了括号并使用了串联,查看此链接以获得有关串联的帮助:http://phphowto.blogspot.co.uk/2006/12/concatenate-strings.html

    【讨论】:

    • 谢谢,这很好用。也感谢您的参考。
    • @SteelyDan 这只是我从谷歌搜索中取出的第一个链接。搜索词:“PHP 字符串连接”应该会带来更广泛的教程/帮助指南
    【解决方案4】:

    只需转义双引号:

    $searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons WHERE author=\"{$_SESSION['username']}\" ";
    

    【讨论】:

    • 他为什么要通过串联转义?
    • 他为什么不应该呢?效果是一样的。
    • 我个人认为他不会注意到 1 微秒的性能差异,但这只是我。 ;)
    • @DarylGill 我希望那个旧帖子会消失。它充满了毫无意义的基准和意见。
    【解决方案5】:

    我认为您需要添加句点字符才能正确连接您的字符串。

    $searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons WHERE author=" . ($_SESSION['username']) . " ";
    

    实际上也不需要括号,所以你可以有:

    $searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons WHERE author=" . $_SESSION['username'] . " ";
    

    【讨论】:

      【解决方案6】:

      试试这个

      $username= mysql_real_escape_string($_SESSION['username']);
      //You should scapes the variable, if the name was O'relly you get an error in sql syntax
      
      $searchstring = "
      SELECT buildname,weapon,category,id,author,buildname 
      FROM weapons 
      WHERE author='$username' "; // on Line 42
      

      我个人更喜欢变量的双引号和单引号内以避免“ \ .”

      注意:mysql_* 扩展自 PHP 5.5.0 起已弃用,将来将被删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展

      【讨论】:

        猜你喜欢
        • 2014-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多