尝试使用pdo php动态创建查询

尝试使用pdo php动态创建查询,php,sql,pdo,Php,Sql,Pdo,我相信我几乎可以解决这个问题,但在网页设计中几乎没有任何意义。如果有人不介意帮我找出我造成错误的地方或需要做更多的事情,那就太好了。基本上,我正在尝试自学和重新学习php,因为已经很多年了。我想给用户一个选项,选择他们的个人资料中要更改的字段,然后提交一个新值。当我点击submit时,出现以下错误: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or acces

我相信我几乎可以解决这个问题,但在网页设计中几乎没有任何意义。如果有人不介意帮我找出我造成错误的地方或需要做更多的事情,那就太好了。基本上,我正在尝试自学和重新学习php,因为已经很多年了。我想给用户一个选项,选择他们的个人资料中要更改的字段,然后提交一个新值。当我点击submit时,出现以下错误:

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 ''lastname' = 'ZIPPI-DO-DAH' WHERE username = 'eric'' at line 1' in /Applications/MAMP/htdocs/TESTING/PHP/PHP-TEST/memberProfile.php:22 Stack trace: #0 /Applications/MAMP/htdocs/TESTING/PHP/PHP-TEST/memberProfile.php(22): PDOStatement->execute(Array) #1 {main} thrown in /Applications/MAMP/htdocs/TESTING/PHP/PHP-TEST/memberProfile.php on line 22
这是我现在的固定代码:

if(isset($_POST['submitUpdate']) && isset($_SESSION['username'])){
        $selectField = $_POST['select'];
        $newValue = $_POST['new_value'];
        $sth = $conn->prepare("UPDATE Testing SET $selectField = :newValue WHERE username = :username");
        $sth->execute(array( ':newValue'=> $newValue, ':username'=> $_SESSION['username'] ));
        header("Locatioon: member.php");
        echo 'Field has been updated, thank you.';
    }
这是我的表格:

<form id="updateProfile" method="POST">
                    <div class="inputField">
                        <label for="select">Select what field you want to change below.(firstname is default)</label>
                        <select name="select" id="selectUpdate">
                            <option value="firstname" selected>First name</option>
                            <option value="lastname">Last name</option>
                            <option value="email">Email</option>
                            <option value="message">Message</option>
                            <option value="username">Username</option>
                            <option value="password">Password</option>
                        </select>
                    </div>
                    <div class="inputField">
                        <label for="new_value">New value - place the new value here</label>
                        <input type="text" name="new_value" id="new_value" placeholder="New Value" tabindex="2">
                    </div>
                    <div class="inputField">
                        <button class="button" name="submitUpdate" id="submitUpdate" tabindex="4">Submit Update</button>
                    </div>
                </form>

不幸的是,PDO不支持这一点。只能绑定数据参数,不能绑定列名或表名。请参阅:selectField convert to string的值,该值带有导致错误的单引号。你可以像这个更新测试集一样查询“lastname”=“ZIPPI-DO-DAH”,其中username=“eric”很奇怪,之前当我在其他论坛上询问时,没有人这么说,谢谢你xv我将如何更改它。我在错误消息中看到了这一点,但我不知道如何更改它。我认为您必须使用if语句来实现这一点。