我的php / sql脚本在本地服务器上运行,但在实时站点上不完整

时间:2017-04-14 21:04:46

标签: php mysql pdo

我编写了脚本,用作2套数据库的CMS,图像库和菜单。他们在我使用xampp和mamp在Windows,Mac甚至linux上测试的本地服务器上工作。

但是在GoDaddy的实时网站上,菜单cms只能修改数据库项目而不会添加新项目。图库cms只能上传图像,但也不会像预期的那样添加数据库项目。

我很感激有关如何调试此问题或任何可能的解决方案的任何提示(仍然需要了解很多关于PDO,php和sql的信息)。

我需要的PDO文件(已更改的数据库凭据):

<?php

ini_set('display_errors', 'On');

define('APP_ROOT', __DIR__);
define('VIEW_ROOT', APP_ROOT . '/views');
define('BASE_URL', '');

$db = new PDO('mysql:host=127.0.0.1;dbname=menu','sqladmin', 'password');

require 'functions.php';
?>

以下是图片上传脚本:

<?php
if(isset($_FILES['files'])) {
    foreach ($_FILES['files']['name'] as $file=> $name) {
        $filename = date('Ymd-His',time()).mt_rand().'-'.$name;
        try {
            if(move_uploaded_file($_FILES['files']['tmp_name'][$file],'../uploads/'.$filename)){
                $stmt = $db->prepare("INSERT INTO multiupload VALUES('',?)");
                $stmt->bindParam(1, $filename);
                $stmt->execute();
            }
        } catch(Exception $e) {
            echo $e;
        }

    }
}
?>

并添加项目到菜单脚本:

<?php 

        if (!empty($_POST)) {
            $name       = $_POST['name'];
            $label      = $_POST['label'];          
            $dsc        = $_POST['dsc'];
            $price      = $_POST['price'];
            $price2     = $_POST['price2'];
            $price3     = $_POST['price3'];
            $price4     = $_POST['price4'];

            $insertPage = $db->prepare("
                INSERT INTO menu (name, label, dsc,price,price2,price3,price4)
                VALUE (:name, :label, :dsc, :price,:price2,:price3,:price4)
            ");

            $insertPage->execute([
                'name'      => $name,
                'label'     => $label,
                'dsc'       => $dsc,
                'price'     => $price,
                'price2'    => $price2,
                'price3'    => $price3,
                'price4'    => $price4,
            ]);

            header('Location: ' . BASE_URL . '/admin/list.php');
        }

?>

2 个答案:

答案 0 :(得分:0)

我的数据库处于严格的SQL模式,因此我必须在我的脚本中更改几行,其中插入的数据类型不一定是我的SQL项目的特定数据类型集。在我的本地服务器上,即使数据类型不一定匹配,空SQL输入也会起作用。有2个SQL插入具有此数据类型问题。

中的一个在图像上传脚本中
$stmt = $db->prepare("INSERT INTO multiupload VALUES('',?)");

我只是将空字符串替换为null。菜单中的另一个添加项目脚本,如果添加的菜单项只有一个价格选项,第二个,第三个和第四个价格将在表单输入上留空,这将导致插入一个空值SQL表的整数数据类型。所以我在页面上添加了javascript,

var input = document.getElementsByClassName('pricex');      

function makeDefault(){
    var input = document.getElementsByClassName('pricex');

    if(input.value.length == 0){

        x = input.length;
        console.log(x);     
        for (var i = 0; i < x; i++) {
            input.getElementsByClassName('.pricex')[i].value = 0.00;
        }
    }
}

确保将空白价格的值更改为整数0.00而不是原始默认值null,这会导致数据类型问题。

感谢xReprisal提出的这个建议,我只需要调试并解决问题:

  

转储查询并尝试在mysql客户端中执行它。当然替换   具有实际价值的占位符。

答案 1 :(得分:-2)

我将如何调试此问题:

  • 确保调用插入查询
  • 检查execute()返回此查询的内容
  • 转储查询并尝试在mysql客户端中执行它。当然用实际值替换占位符。