具有多个连接的 mysqli Prepared 语句不断返回 false [关闭]

Posted

技术标签:

【中文标题】具有多个连接的 mysqli Prepared 语句不断返回 false [关闭]【英文标题】:mysqli Prepared statements with multiple joins keeps returning false [closed] 【发布时间】:2020-09-23 14:46:09 【问题描述】:

我应该设计一个考试服务器系统,但我在尝试使用 mysqli 的准备函数准备语句时不断出错。我正在使用 php 连接到由 $conn 变量表示的 sql(它确实连接到数据库),并且我在 mysql 工作台中尝试了相同的确切语句,它工作正常。这是我写的代码:

$stmtTempTable = $conn->prepare("CREATE TEMPORARY TABLE front_action_temp
                        SELECT * FROM front_action
                        WHERE time_offset > 0");
$stmt = $conn->prepare("SELECT event_name, status, day_of_week, week_of_year, event_year, start_time, time(start_time + 
                        time_offset) as end_time, machine_group
                        FROM front_weekly
                        LEFT JOIN front_event ON front_weekly.event_id=front_event.event_id
                        LEFT JOIN front_daily ON front_event.event_id=front_daily.event_id
                        LEFT JOIN front_group ON front_daily.group_id=front_group.group_id
                        LEFT JOIN front_action_temp ON front_action_temp.event_id=front_event.event_id
                        WHERE day_of_week=? and week_of_year=? and event_year=?");

if ($stmt === false)
    die('Unable to execute');
 else 
    $stmt->bind_param('sss', $dayOfWeek, $weekNumber, $year);
    $stmt->execute();

我一直在为 $stmt 弄错。任何想法为什么?

【问题讨论】:

$stmtTempTable 永远不会被执行。 您需要停止手动检查错误。请阅读:Should we ever check for mysqli_connect() errors manually? 和 Should I manually check for errors when calling “mysqli_stmt_prepare”? $stmtTempTable 不需要准备,您没有传递任何占位符/值。 【参考方案1】:

你只是prepare()CREATE TEMPORARY TABLE...,而不是execute()。第二条语句失败,因为表不存在。

【讨论】:

以上是关于具有多个连接的 mysqli Prepared 语句不断返回 false [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PDO vs MYSQLI,Prepared Statemens 和绑定参数

MYSQLI Prepared statement update statement with where in array

致命错误:未捕获的异常 'mysqli_sql_exception' 带有消息 'No index used in query/prepared statement'

如何在 mysqli 准备语句中使用多个内部连接和多个 WHERE 子句? [复制]

检查db prepared语句中是否已存在用户名

为啥 MySQLi 库本身不支持命名参数?