【发布时间】:2018-11-29 22:23:57
【问题描述】:
我正在尝试使用 switch 函数来确保我将在 mysql 查询中使用的列名。我对php不够熟悉,无法修复。当前测试回显返回,但不返回查询结果。如果可能的话,我希望保持相同的结构以保持清洁。感谢您的帮助。
我从另一个帖子中获得了切换代码: Can PHP PDO Statements accept the table or column name as parameter?
这是我尝试整合它的尝试:
<?php
//1. Create a database connection
require_once('configfile.php');
$mysql_host = DB_HOST;
$mysql_database = DB_NAME;
$mysql_username = DB_USER;
$mysql_password = DB_PASS;
try {
$db = new PDO("mysql:host=$mysql_host; dbname=$mysql_database", $mysql_username, $mysql_password);
// set the PDO error mode to exception
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8
} catch (Exception $e) {
die("Unable to connect: " . $e->getMessage());
}
$building = $_POST["building"];
$shift = $_POST["shift"];
function buildQuery( $shift )
{
switch($shift)
{
case 'first':
$column = 'columnA';
break;
case 'second':
$column = 'columnB';
break;
}
echo "This is the column : $column"; //testing
}
try {
// Return errors
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Begin transaction
$db->beginTransaction();
// Query 1
buildQuery($shift);
$stm= $db->prepare("SELECT definition FROM schedules
WHERE building = :building
AND $column = '1'");
$stm->bindParam(':building', $building, PDO::PARAM_STR);
$stm->execute();
foreach( $stm as $row )
{
echo $row['definition'] . "|";
};
$db->commit();
$db = null; // Disconnect
} catch (Exception $e) {
// If transaction fail, use checkpoint and rollback
$db->rollBack();
echo "ColumnSwitch Failed: " . $e->getMessage().'<br />';
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
?>
【问题讨论】:
-
只是出于好奇,如果
$shift不是“第一”或“第二”会发生什么? -
@Chris 如果不是第 1 或第 2,如第 3,它将返回空结果。当我取回数据并在那里采取行动时,我会寻找空结果
-
现在,您的查询看起来像“SELECT definition FROM schedules WHERE building :building AND = '1'”;如果转变不是您所期望的,我建议包括一个默认列或可能添加一个纾困
-
好的,我会处理那件作品。谢谢克里斯