Я пытаюсь использовать функцию переключения для безопасности, чтобы получить имя столбца, который я буду использовать в запросе mysql.Я не настолько хорошо знаком с php, чтобы это исправить.В настоящее время тестовое эхо возвращает, но не результаты запроса.Я надеялся сохранить ту же структуру, чтобы она была чистой, если это возможно.Спасибо за любую помощь.
Я получил код переключателя из другого поста: Могут ли операторы PHP PDO принимать имя таблицы или столбца в качестве параметра?
Вот моя попытка попробоватьчтобы интегрировать это:
<?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);
}
?>