PHP脚本在本地主机上读取和写入,但仅在服务器上读取
我正在编写一个简单的脚本,用于在数据库中创建新行、读取和更新这些行/条目。我正在连接到rackspace托管的数据库。当我在本地主机服务器(wamp)上运行脚本时,我可以读取、写入和更新数据库。但当我在服务器上运行它时(完全相同的脚本),它从数据库中读取数据,但不会写入或更新数据库。我已经联系了Rackspace,他们没有帮助。。。这是我的剧本。有什么建议吗PHP脚本在本地主机上读取和写入,但仅在服务器上读取,php,mysql,pdo,Php,Mysql,Pdo,我正在编写一个简单的脚本,用于在数据库中创建新行、读取和更新这些行/条目。我正在连接到rackspace托管的数据库。当我在本地主机服务器(wamp)上运行脚本时,我可以读取、写入和更新数据库。但当我在服务器上运行它时(完全相同的脚本),它从数据库中读取数据,但不会写入或更新数据库。我已经联系了Rackspace,他们没有帮助。。。这是我的剧本。有什么建议吗 <?php include_once('sanitize.php'); //sanitize.php used to ster
<?php
include_once('sanitize.php'); //sanitize.php used to sterilize inputs
/************************************************************************************/
/********************************* DATABASE CLASS ***********************************/
/************************************************************************************/
$hostname = 'xxx';
$database = 'xxx';
$username = 'xxx';
$password = 'xxx';
try {$DBH = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);}
catch(PDOException $e) { echo $e->getMessage();}
/************************************************************************************/
/********************************* MAIN FUNCTIONS ***********************************/
/************************************************************************************/
function list_active_orders() {
global $DBH;
$STH = $DBH -> prepare("SELECT * FROM orders ORDER BY id DESC");
$STH -> execute();
$dataSet = $STH -> fetchAll();
echo "<table class='activeOrders'>
<tr>
<th>DocNum</th>
<th>Customer</th>
<th>Rep</th>
<th>Product</th>
<th>Ordered</th>
<th>Shipped</th>
<th>Received</th>
<th>Delieverd</th>
</tr>";
foreach ($dataSet as $data) {
if(!$data['Ordered']) {
$Ordered = "<input type='checkbox' name='Ordered' value='Ordered' class='orderedCheckbox'>";
}
else {
$Ordered = $data['Ordered'];
}
if(!$data['Shipped']) {
$Shipped = "<input type='checkbox' name='Shipped' value='Shipped' class='shippedCheckbox'>";
}
else {
$Shipped = $data['Shipped'];
}
if(!$data['Received']) {
$Received = "<input type='checkbox' name='Received' value='Received' class='receivedCheckbox'>";
}
else {
$Received = $data['Received'];
}
if(!$data['Delivered']) {
$Delivered = "<input type='checkbox' name='Delivered' value='Delivered' class='deliveredCheckbox'>";
}
else {
$Delivered = $data['Delivered'];
}
echo "<tr id='".$data['id']."'>";
echo "<td>".$data['DocNum']."</td>";
echo "<td>".$data['Customer']."</td>";
echo "<td>".$data['Rep']."</td>";
echo "<td>".$data['Product']."</td>";
echo "<td>".$Ordered."</td>";
echo "<td>".$Shipped."</td>";
echo "<td>".$Received."</td>";
echo "<td>".$Delivered."</td>";
echo "</tr>";
}
echo "</table>";
}
function new_order($DocNum, $Customer, $Rep, $Product) {
global $DBH;
$STH = $DBH -> prepare("INSERT INTO orders (DocNum, Customer, Rep, Product) VALUES (:DocNum, :Customer, :Rep, :Product)");
$STH -> bindValue(':DocNum', $DocNum, PDO::PARAM_STR);
$STH -> bindValue(':Customer', $Customer, PDO::PARAM_STR);
$STH -> bindValue(':Rep', $Rep, PDO::PARAM_STR);
$STH -> bindValue(':Product', $Product, PDO::PARAM_STR);
$STH -> execute();
}
function update_order($column, $date, $id) {
global $DBH;
switch ($column) {
case 'Ordered':
$STH = $DBH -> prepare("UPDATE orders SET Ordered = :d WHERE id = :id");
break;
case 'Shipped':
$STH = $DBH -> prepare("UPDATE orders SET Shipped = :d WHERE id = :id");
break;
case 'Received':
$STH = $DBH -> prepare("UPDATE orders SET Received = :d WHERE id = :id");
break;
case 'Delivered':
$STH = $DBH -> prepare("UPDATE orders SET Delivered = :d WHERE id = :id");
break;
default:
# code...
break;
}
$STH -> bindValue(':d', $date, PDO::PARAM_STR);
$STH -> bindValue(':id', $id, PDO::PARAM_INT);
$STH -> execute();
}
/************************************************************************************/
/********************************** CONTROL LOOP ************************************/
/************************************************************************************/
$action = sanitize(@$_POST['action']);
$DocNum = sanitize(@$_POST['DocNum']);
$Customer = sanitize(@$_POST['Customer']);
$Rep = sanitize(@$_POST['Rep']);
$Product = sanitize(@$_POST['Product']);
$column = sanitize(@$_POST['column']);
$date = sanitize(@$_POST['d']);
$id = sanitize(@$_POST['id']);
switch ($action) {
case 'view_orders':
list_active_orders();
break;
case 'new_order':
new_order($DocNum, $Customer, $Rep, $Product);
break;
case 'Update_Order':
update_order($column, $date, $id);
break;
default:
break;
}
?>
我的问题是为什么会发生这种错误
答案是您试图混合使用两个库,PDO
和mysql.*
除此之外,mysql.*
已被弃用,但我相信您已经知道了这一点
我不能给你内在的原因,但这样做是个坏主意
如果您使用的是PDO,并且您正确地准备了查询,那么您就不必担心逃出虚名。感谢您提供的mysql主机/user/pass/db名称。。。最好现在就去换。另外,mysql帐户创建为user@host成对(其中一个允许使用通配符)。根据您的本地和远程地址,您可能有两个完全不同的mysql帐户,并且您正在连接到一个只允许读取的帐户。他们的唯一用户和通过测试数据库没有有效数据,但感谢您将其xxxing出来。如果两个(服务器和本地)脚本都显示相同的数据,并且当我从本地脚本更新数据库时,服务器脚本显示更改,那么如何连接到两个不同的数据库?我很确定,使用相同的连接无法做到这一点。您必须为另一个连接创建一个新的PDO
类,然后对其执行完全相同的操作:)因为mysql使用连接的源IP加上用户名来创建用户帐户。user@127.0.0.1是一个完全不同的帐户user@127.0.0.2,即使他们都是“用户”。每个人都可以有自己的补助金。如果您是以user@%
的身份授予的,那么它将是通配符,不重要。但是如果不使用通配符,那么这两个帐户可能有不同的授权。@Andreastorvikstrauman-在这里询问stackoverflow如何只声明我的凭据一次之后,我以前用其他脚本也这样做过。
[28-Apr-2014 15:54:43 America/Chicago] PHP Warning: mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]: A link to the server could not be established in /mnt/target03/354651/orders.entrerock.com/web/content/sanitize.php on line 26
<?php
function cleanInput($input) {
$search = array(
'@<script[^>]*?>.*?</script>@si', // Strip out javascript
'@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
'@<style[^>]*?>.*?</style>@siU', // Strip style tags properly
'@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments
);
$output = preg_replace($search, '', $input);
return $output;
}
function sanitize($input) {
if (is_array($input)) {
foreach($input as $var=>$val) {
$output[$var] = sanitize($val);
}
}
else {
if (get_magic_quotes_gpc()) {
$input = stripslashes($input);
}
$input = cleanInput($input);
$output = mysql_real_escape_string($input);
}
return $output;
}
?>