根据许多人的建议,我正在学习PDO以执行大型PHP MySQL查询.我的查询有什么问题?代码只是一个大型表单提交,每个人都建议PDO手动编码一个大型的mysql查询.
查询本身给出了Dreamweaver的抱怨,但没有来自Zend Studio.可能有什么不对吗?
<?php
$host="localhost"; // Host name
$username="********"; // Mysql username
$password="********"; // Mysql password
$db_name="practice"; // Database name
$tbl_name="administration"; // Table name
// Connect to server and select databse.
//$dbc = mysql_connect("$host", "$username", "$password")or die("cannot connect");
try {
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$host;dbname=$db_name", $username, $password);
}
catch(PDOException $e) {
echo $e->getMessage("Error Connecting to Database");
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
}
mysql_select_db("$db_name")or die("cannot select DB");
//These variables stay the same and can be used as is in A PDO submission
$ac1=$_POST['ac1'];
$ac2=$_POST['ac2'];
$fan=$_POST['fan'];
$na=$_POST['na'];
$dh=$_POST['dh'];
//Initialization of variables is typical
$tolerance1=$_POST['tolerance1'];
$temptime1=$_POST['temptime1'];
$tolerance2=$_POST['tolernce2'];
$temptime2=$_POST['temptime2'];
$tolerance3=$_POST['tolerance3'];
$temptime3=$_POST['temptime3'];
$tolerance4=$_POST['tolerance4'];
$temptime4=$_POST['temptime4'];
$tolerance5=$_POST['tolerance5'];
$temptime5=$_POST['temptime5'];
$humidtolerance1=$_POST['humidtolerance1'];
$humidtime1=$_POST['humidtime1'];
$humidtolerance2=$_POST['humidtolerance2'];
$humidtime2=$_POST['humidtime2'];
$humidtolerance3=$_POST['humidtolerance3'];
$humidtime3=$_POST['humidtime3'];
$humidtolerance4=$_POST['humidtolerance4'];
$humidtime4=$_POST['humidtime4'];
$humidtolerance5=$_POST['humidtolerance5'];
$humidtime5=$_POST['humidtime5'];
$custnum = 0;
//Each parameter is bound to a number.
$STH->bindParam(1, $ac1);
$STH->bindParam(2, $ac2);
$STH->bindParam(3, $fan);
$STH->bindParam(4, $na);
$STH->bindParam(5, $dh);
$STH->bindParam(6, $tolerance1);
$STH->bindParam(7, $temptime1);
$STH->bindParam(8, $tolerance2);
$STH->bindParam(9, $temptime2);
$STH->bindParam(10, $tolerance3);
$STH->bindParam(11, $temptime4);
$STH->bindParam(12, $tolerance4);
$STH->bindParam(13, $temptime4);
$STH->bindParam(14, $tolerance5);
$STH->bindParam(15, $temptime5);
$STH->bindParam(16, $humidtolerance1);
$STH->bindParam(17, $humidtime1);
$STH->bindParam(18, $humidtolerance2);
$STH->bindParam(19, $humidtime2);
$STH->bindParam(20, $humidtolerance3);
$STH->bindParam(21, $humidtime3);
$STH->bindParam(22, $humidtolerance4);
$STH->bindParam(23, $humidtime4);
$STH->bindParam(24, $humidtolerance5);
$STH->bindParam(25, $humidtime5);
$STH->bindParam(26, $custnum);
//Dreamweaver says there is an error here but Zend Studio does not.
# unnamed placeholders
$STH = $DBH->("UPDATE $tbl_name WHERE custnum = $custnum (ac1, ac2, fan, na, dh, tolerance1, temptime1, tolerance2, temptime2, tolerance3, temptime3, tolerance4, temptime4, tolerance5, temptime5, humidtolerance1, humidtime1, humidtolerance2, humidtime2, humidtolerance3, humidtime3, humidtolerance4, humidtime4, humidtolerance5, humidtime5,) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$STH->execute();
//Send them back to the page they were at/
header("location:index.php");
?>
Run Code Online (Sandbox Code Playgroud)
net*_*der 10
那你做得好:
$DBH->("...");
Run Code Online (Sandbox Code Playgroud)
代替:
$STH = $DBH->prepare("...");
Run Code Online (Sandbox Code Playgroud)
您还在$STH代码中使用了未初始化的内容(因为它prepare初始化它并且缺少它).您首先要准备语句,然后将参数绑定到它(不是相反,就像实际情况一样):
$STH = $DBH->prepare("...");
$STH->bindParam(1, $ac1);
$STH->bindParam(2, $ac2);
// ...
Run Code Online (Sandbox Code Playgroud)
您也可以准备它并将数组传递给PDOStatement::execute:
$STH = $DBH->prepare("...");
$STH->execute(array($ac1, $ac2, ...));
Run Code Online (Sandbox Code Playgroud)
你的MySQL查询也错了,你正在做:
UPDATE table WHERE something = something (column1, column2) values (?, ?)
Run Code Online (Sandbox Code Playgroud)
这WHERE是错位的,(column) VALUES (?)语法是INSERT语法,而不是UPDATE.你想要这样做:
UPDATE table SET column1=?, column2=? WHERE something = something
Run Code Online (Sandbox Code Playgroud)
最后,你应该删除这个:
mysql_select_db("$db_name")or die("cannot select DB");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3514 次 |
| 最近记录: |