PHP SQL 语句不起作用,但可以直接从 phpmyadmin [重复]

Posted

技术标签:

【中文标题】PHP SQL 语句不起作用,但可以直接从 phpmyadmin [重复]【英文标题】:PHP SQL statement doesn't work but works directly from phpmyadmin [duplicate] 【发布时间】:2020-04-02 19:36:56 【问题描述】:

我已经看到了很多关于此的问题,但是我还没有找到特定于我的答案。我有一个 php,用户在其中输入票号,信息将存储在一个数据库中,但是我想检查不同的数据库和表以检查该号码是否在表中。输入的是一个字符串,我试过 intval($ticket) 还是不行。

    $ticketQry = mysqli_prepare($con,"select count(*) from <database2>.mantis_bug_table where id =?");
    mysqli_stmt_bind_param($ticketQry,'i',intval($Ticket));
    mysqli_execute($ticketQry);
    var_dump($ticketQry);

    Result:
    object(mysqli_stmt)#7 (10)  ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(1) ["field_count"]=> int(1) ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0)   ["sqlstate"]=> string(5) "00000" ["id"]=> int(6) 

我发现affected_rows int(-1) 表示查询有问题,但我终生无法弄清楚。

我尝试添加一个 mysqli_select_db() 语句来在两个数据库之间切换,是的,我在执行此操作时从 SQL 语句中删除了,但这不起作用。

现在,如果我进入 phpmyadmin 并输入相同的参数和 sql 语句,它就可以正常工作了。我也尝试将其绑定为字符串。

如果我在 phpmyadmin 中运行它,结果为 1。所以我再次知道这是在 phpmyadmin 中运行的,但不是我的 PHP 脚本。

【问题讨论】:

$con 里面有数据库信息,所以不知道你为什么需要使用 数据库名称周围真的有&lt;&gt;吗?这不是有效的 MySQL 语法。 @Maxqueue,因为我想我应该说我正在连接到 localhost,然后使用 mysqli_select_db(), @Barmar,不,我在数据库名称周围没有 ,我会收到错误,我的结果现在显示错误,只是运行查询时出现问题,而不是 SQL 语法错误。 mysqli_fetch_assoc() expects parameter / Call to a member function bind_param() errors. How to get the actual mysql error and fix it? 【参考方案1】:

您需要调用mysqli_stmt_store_result() 来缓冲准备好的语句的结果。

php > $db = new mysqli('localhost', 'username', 'password', 'dbname');
php > $stmt = $db->prepare("SELECT COUNT(*) from t_users where username = ?");
php > $username = 'barmar';
php > $stmt->bind_param("s", $username);
php > $stmt->execute();
php > var_dump($stmt);
object(mysqli_stmt)#1 (10) 
  ["affected_rows"]=> // affected_rows is initially -1
  int(-1)
  ["insert_id"]=>
  int(0)
  ["num_rows"]=> // num_rows is initially 0
  int(0)
  ["param_count"]=>
  int(1)
  ["field_count"]=>
  int(1)
  ["errno"]=>
  int(0)
  ["error"]=>
  string(0) ""
  ["error_list"]=>
  array(0) 
  
  ["sqlstate"]=>
  string(5) "00000"
  ["id"]=>
  int(1)

php > $stmt->store_result();
php > var_dump($stmt);
object(mysqli_stmt)#1 (10) 
  ["affected_rows"]=> // affected_rows is now 1
  int(1)
  ["insert_id"]=>
  int(0)
  ["num_rows"]=> // num_rows is now 1
  int(1)
  ["param_count"]=>
  int(1)
  ["field_count"]=>
  int(1)
  ["errno"]=>
  int(0)
  ["error"]=>
  string(0) ""
  ["error_list"]=>
  array(0) 
  
  ["sqlstate"]=>
  string(5) "00000"
  ["id"]=>
  int(1)

【讨论】:

以上是关于PHP SQL 语句不起作用,但可以直接从 phpmyadmin [重复]的主要内容,如果未能解决你的问题,请参考以下文章

php 中的 continue 语句不起作用?

在 php 7.2 中启用 pdo_sqlsrv,不起作用

php sql 异常判断

从php执行时mssql批量插入不起作用

PHP 脚本在直接管理员中不起作用,但在 cPanel 中起作用

php中的cURL不起作用