因此,我有一个包含6列的表格,每列对应一种特定的产品类型.每列都有一个数字,该数字与人们选择该产品类型的次数相对应.
A | B | C | D | E | F
---------------------
0 | 0 | 0 | 0 | 0 | 0
因此,如果用户选择类型A,那么我想将列A的数字从0更新为1.这是我编写的SQL代码:
$link = new PDO('***;dbname=***;charset=UTF-8','***','***');
$stmt = $link->prepare("UPDATE table SET :column=:num");
$stmt->bindParam(':column', $column);
$stmt->bindParam(':num', $num);
$stmt->execute();
但这根本没有更新任何内容.所以我猜测SQL代码有问题,最有可能与列占位符:column有关.谁能告诉我正确的SQL代码?
解决方法:
首先确保$column在可接受的值列表中.接下来,您无法绑定:column,您将需要像这样分配它:
$stmt = $link->prepare('UPDATE table SET ' . $column .' = :num');
$stmt->bindParam(':num', $num);
$stmt->execute();
如果您要检查有效的$列,我会使用
$valid_column = preg_match(‘/ [a-z0-9 _] / i,$column);
或足够的替换(preg_replace).尽管您可能将其包装在try / catch中,并设置要在您的PDO实例中引发的异常,以确保其合法性.
标签:php,sql,mysql,database,pdo 来源: https://codeday.me/bug/20191013/1908921.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。