Имя столбца PHP PDO через структуру функций переключения - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь использовать функцию переключения для безопасности, чтобы получить имя столбца, который я буду использовать в запросе 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);
}    

?>

1 Ответ

0 голосов
/ 30 ноября 2018

Вы должны изменить buildQuery, чтобы вернуть желаемое значение.

function buildQuery( $shift ) 
{
    switch($shift)
    {
        case 'first':
            $column = 'columnA';
            break;    

        case 'second':
            $column = 'columnB';
            break;
    }    

    return $column;
}  

И затем назовите это так:

$column = buildQuery($shift);

Другой вариант - сделать $column глобальной переменной, но это не очень хорошая практика, поэтому я не будурекомендую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...