【发布时间】:2015-12-24 05:34:59
【问题描述】:
我是 PDO 和 php 的新手。我想通过发送到下面脚本的链接将一行从一个表移动到另一个表。
LINK "id" 用作 invtable 中的主键,(请参阅下面脚本中的 FROM invtable)
提交-ads-florida.php?id=01820007985
脚本提交-ads-florida.php
<?php
$host = "localhost";
$user = "user";
$password = "pass";
$database_name = "db";
$pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
$barCode = $GET['id'];
$query = "INSERT INTO adstable (Brand, Description, Price, Size, Price, Barcode)
SELECT Brand, Description, Price, Size, Price, Barcode FROM invtable
WHERE Barcode='".$barCode."'";
$pdo->query($query);
?>
问题
通过 GET[id] 删除了额外的括号)。我收到以下错误。
致命错误:在 /home/myaccount/public_html/florida-ave/submit-ads-florida 中出现消息“SQLSTATE[42000] 的未捕获异常“PDOException”:语法错误或访问冲突:1110 列“价格”指定了两次” .php:16 堆栈跟踪:#0 /home/myaccount/public_html/florida-ave/submit-ads-florida.php(16): PDO->query('INSERT INTO flo...') #1 {main}在第 16 行扔进 /home/myaccount/public_html/florida-ave/submit-ads-florida.php
更新
我更正了多个价格条目。没有数据被添加到 adstable 中,我也没有收到任何错误。
【问题讨论】:
-
"INSERT INTO adstable (Brand, Description, Price, Size, Price, Barcode) SELECT Brand, Description, Price, Size, Price, Barcode FROM invtable WHERE Barcode='".$barCode."'";你想做什么?INSERT?SELECT?或者呃,INSELECT? -
如果我把链接改成
?id=1' OR Description LIKE '%'怎么办?这是一个注入漏洞。$barCode = $GET['id']);也是一个语法错误:它应该是$barCode = $GET['id'];(不是括号)。确保打开display_errors并将错误级别设置为E_ALL|E_STRICT -
@HawasKaPujaari:
INSERT与SELECT查询的结果集,这是完全有效的,虽然有点奇怪 -
@CliffT:错误信息很清楚,您的
SELECT语句选择了Price字段两次:SELECT Brand, Description, >Price<, Size, >Price< -
@EliasVanOotegem 感谢您指出这一点,我以为我是唯一一个阅读异常消息的人
Column 'Price' specified twice