0
$query = "SELECT :option FROM `site`.`fish` WHERE `fishid`=:fishid";
    if ($stmt = $connect->prepare($query)){
        $stmt->bindValue(':option', $option, PDO::PARAM_INT);
        $stmt->bindValue(':fishid', $fishid, PDO::PARAM_INT);
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        echo '<pre>', print_r($rows, true), '</pre>';
    }

以下のリターン

Array
(
    [0] => Array
        (
            [id] => id
        )

) 

[id]=>7 を返すようにしたい BindValues と関係があります...数値として認識されていませんか?

4

3 に答える 3

0

列名は SQL 変数ではありません (SQL はその場所に変数を持つことをサポートしていません) が、PHP では単なる文字列です:

$option = (string) $option;

switch ($option) 
{
    case "id": 
        break;

    default:
        throw new InvalidArgumentException(
        sprintf("Invalid identifier: '%s'", $option)
    );
}


if (false !== strpos($option, "`")) 
{
    throw new InvalidArgumentException(
        sprintf("Invalid column name: '%s'", $option)
    );
}

$query = sprintf("SELECT `%s` FROM `site`.`fish` WHERE `fishid`=:fishid", $option);

if ($stmt = $conn->prepare($query))
{
    $stmt->bindValue(':fishid', $fishid, PDO::PARAM_INT);
    $stmt->execute();
    ...
于 2013-04-13T17:14:27.273 に答える