2

私が見ていないように見える問題に遭遇しました。

これが私の機能です

function addIT($type, $amount, $id) {
$db = new database();
$conn8 = $db->connect();
$addit = $conn8->prepare("UPDATE accountTable SET :type = :type + :amount WHERE ID =     :id");
$addit->execute(array('type'=>$type, 'amount'=>$amount, 'id'=>$id));
}

私が作る呼び出しはこちらです:

$type = "age";
$amount = 17;
$id = 1;
addIT($type, $amount, $id);

コードを実行すると、以下のエラーが表示されます

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''age' = 'age' + '17' WHERE ID = '1'' at line 1' in /Library/WebServer/Documents/me/functions/activity.php:7 Stack trace: #0 /Library/WebServer/Documents/me/functions/activity.php(7): PDOStatement->execute(Array) #1 /Library/WebServer/Documents/me/content/doadd.php(66): addIT('age', 17, '1') #2 /Library/WebServer/Documents/me/main(48): include('/Library/WebSer...') #3 /Library/WebServer/Documents/me/where.php(25): include('/Library/WebSer...') #4 {main} thrown in /Library/WebServer/Documents/me/functions/activity.php on line 7

私の実行または準備ステートメントに何か問題があると確信しています。もう見ません。

4

2 に答える 2

4

クエリに変数の列名またはテーブル名を含めることはできません。使用する

UPDATE accountTable 
SET age = age + :amount 
WHERE ID = :id

ところで、人の年齢ではなく生年月日を保存する必要があります。その後、更新する必要はありません。

于 2013-07-29T22:24:40.787 に答える
2
function addIT($conn, $type, $amount, $id)
{
    $allowed = array('age','sex','whatever');
    if (!in_array($type,$allowed))
    {
         throw new Exception("Invalid type");
    }
    $sql = "UPDATE accountTable SET `$type` = `$type` + :amount WHERE ID = :id"
    $stm = $conn->prepare($sql);
    $stm->execute(array('amount'=>$amount, 'id'=>$id));
}
于 2013-07-29T22:29:01.673 に答える