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

我的php/sql脚本可以在本地服务器上运行,但不能完全在实时站点上运行,php,mysql,pdo,Php,Mysql,Pdo,我编写了脚本,作为两套数据库、一个图像库和菜单的CMS。它们在本地服务器上工作,我使用xampp和mamp在windows、mac甚至linux上测试了这些服务器 但在GoDaddy的实时站点上,cms菜单只能修改数据库项,而不会添加新项。gallery cms只能上传图像,但也不会像预期的那样添加数据库项 我非常感谢关于如何调试这个问题或任何可能的解决方案的任何提示(关于PDO、php和sql还有很多需要学习) 我在中需要的PDO文件(已更改的数据库凭据): 以下是图像上载脚本: <

我编写了脚本,作为两套数据库、一个图像库和菜单的CMS。它们在本地服务器上工作,我使用xampp和mamp在windows、mac甚至linux上测试了这些服务器

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

我非常感谢关于如何调试这个问题或任何可能的解决方案的任何提示(关于PDO、php和sql还有很多需要学习)

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


以下是图像上载脚本:

<?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;
        }

    }
}
?>

如何调试此问题:

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

我的数据库处于严格的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;
        }
    }
}
var input=document.getElementsByClassName('pricex');
函数makeDefault(){
var input=document.getElementsByClassName('pricex');
if(input.value.length==0){
x=输入长度;
控制台日志(x);
对于(变量i=0;i
确保空白价格的值将更改为整数0.00,而不是导致数据类型问题的原始默认值null

感谢Xretripal的建议,这是我调试和解决问题所需的全部:

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


插入多上传值(“”、)
-第一个值为空而第二个值为参数化的原因是什么?它也可以用空字符串参数化。首先,查找PHP、MySQL等的版本差异,然后检查web服务器用户在MySQL中的权限。如果要检查真正的错误,也许你知道你的代码失败的原因。@DhruvSaxena第一个值是一个自动递增的id,所以我想不需要对它进行参数化。@Sloahrasher我已经尝试过检查这些差异,实际上我认为这可能是由于GoDaddy的服务器只在PHP5.6上,但我在5.6上用xampp进行了测试,它在那里工作。即使使用SQL和db服务器类型,微小的版本差异是否也很重要?如果您能详细介绍前2个问题,我们将非常感谢您的反馈,因为它没有回答“我很感激关于如何调试此问题或任何可能的解决方案的任何提示”?(不知道为什么你被否决了,顺便说一句,你的建议很受欢迎!)我发现我的文件上传脚本有一个问题,语句INSERT INTO MULTIPLOAD VALUES(“”、?)。显然,空字符串不会在Godaddy的sql server上插入整数值,但在我的本地服务器b/c上它会插入整数值,因为它没有配置。在尝试你的第三个建议时,我在sql客户机中发现了错误#1366,只是在谷歌上搜索了一下,发现这个解决方案在这里得到了很好的解释:希望我能投票支持你!xDOh,是的,配置不同。这些bug可能真的是一场噩梦,但我很高兴您找到了解决方案:)
$stmt = $db->prepare("INSERT INTO multiupload VALUES('',?)");
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;
        }
    }
}