Php 命中计数器sql错误

Php 命中计数器sql错误,php,mysql,sql,arrays,Php,Mysql,Sql,Arrays,我试图让这个命中计数器与pdo一起工作,但它不断抱怨解析错误: 语法错误,意外的“(”,应为标识符(T_字符串)或 变量(T_变量)或第37行中的“{”或“$” 我不确定是否是索引,因为我的数据库名为group2,带有一个表计数器和一个名为counter的列。我也尝试过使用mysql过程方法,但我对这两种方法都不太熟悉,我使用的每一个指南都会出现这些错误。我做错了什么 *编辑新代码: <?php try { $dsn = "mysql:host=xxxxxxxxxxxxxx"; // Mi

我试图让这个命中计数器与pdo一起工作,但它不断抱怨解析错误:

语法错误,意外的“(”,应为标识符(T_字符串)或 变量(T_变量)或第37行中的“{”或“$”

我不确定是否是索引,因为我的数据库名为group2,带有一个表计数器和一个名为counter的列。我也尝试过使用mysql过程方法,但我对这两种方法都不太熟悉,我使用的每一个指南都会出现这些错误。我做错了什么

*编辑新代码:

<?php
try
{
$dsn = "mysql:host=xxxxxxxxxxxxxx"; // Missing semi colon (;)
$conn = new PDO($dsn,'group2', 'xxxxxxxxxxxx');  //connection
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOexception $e)
{
Print($e->getMessage());
Exit;
}


$sql = ("SELECT * FROM counter");
$conn->query($sql);
$row = $conn->query($sql);
$counter =$row['counter'];

if(empty($counter))
{

$counter = 1; 
$insert = $conn->query("INSERT INTO counter VALUES('$counter')");  
}

$add= $counter+1;
$insertNew = $conn->("UPDATE counter SET counter = '$add'"); 
echo $counter;

?>


<?php $conn = null; ?>
您的代码有很多错误

  • 没有函数
    mysqle\u select\u db()
    。有一个函数名为
    mysql\u select\u db()
    ,但由于您使用的是PDO,因此如果有可能,您可能希望使用
    $conn->query('use group2')
  • 您正在使用尚未设置的变量运行查询。
    $conn->query($sql);
    再往下两行就不行了
  • 方括号在表名中无效,
    +
    也不是有效的查询列。
    SELECT+FROM counter[counter]
    根本不起作用。您可能想执行
    SELECT*FROM counter
  • 您的查询不会返回任何内容,但我很确定它不会返回
    计数器[counter]
    列。您可能只是想执行
    $counter=$row['counter'];
    (是的,您可以欺骗MySQL在列名中使用方括号,但这很可能不是本文的目的)
  • 最后但并非最不重要的一点是,您的更新查询不仅发出了两次(一次使用PDO,一次通过mysql_*lib),而且还出现了错误。假设您的
    计数器
    表中有
    计数器
    列,它很可能会读成
    $insertNew=$conn->(“更新计数器集计数器='$add');
  • 编辑:

    通过一些小细节,您的脚本看起来不错

  • 您可能不应该发布数据库密码
  • 您的一个数据库查询做得不多:
    $conn->query($sql);
    -您在下一行再次执行该操作
  • 您的计数器将以2而不是1开始,因为您在插入后正在更新(更新不在
    if
    语句的
    else
    部分,因此它将在所有情况下运行)
  • 如果它仍然不起作用,您应该尝试将echo/print\r/var\u dump语句放入您的代码中,以查看它在哪里崩溃-例如:

    print\r($conn->errorInfo());
    将为您提供有关PDO内部错误的信息。
    echo“$counter”
    将为您提供选择的结果


    print_r($conn->errorInfo());

    真的不确定这里的目的是什么。
    counter[counter]
    真的是一个列名吗?当您使用PDO时,
    mysqle\u select\u db()
    用于什么(而且拼写错误)?以及“从counter[counter]选择+”是什么“实际执行”要访问表“counter”中的列“counter”,语法应该是“counter.counter”。它的$insertNew=$conn->(“更新计数器集计数器[counter]=(“$add”)”);列名是计数器表中的计数器,所以它只是计数器而不是计数器[counter]?好的,我更改了您所说的一切,$conn->query('use group2'))虽然删除mysql_select和$conn->query都会导致相同的t字符串错误,但除了另一个错误外,没有产生任何其他错误。现在我开始怀疑这是否是因为我的表是如何创建的:CREATE table
    group2
    counter
    counter
    INT NOT NULL默认值0,主键(
    counter
    );如果有太多的更改,您可能应该在问题中添加新的代码。我相应地更改了答案,$conn->query($sql);$result=$conn->query($sql);$insertNew=$conn->query(“更新计数器集计数器='$add'));查询不存在。小错误。非常感谢您的帮助