为什么我不能改变我的旧方法?

时间:2014-10-23 19:36:59

标签: php mysql pdo

我有一个数据库,我可以使用pdo类型的连接在这个sql语句中添加内容..:

$sql_createAD = "INSERT INTO `kijilikedb`.`advertise` (`AD_ID`, `AD_NAME`, `REF_STATE`, `REF_USER`, `REF_CAT`, `REF_SUB`, `REF_DESC`, `REG_DATE`, `EXP_DATE`, `AD_TYPE`, `AD_PRICE` , `IMAGE`) VALUES (NULL,'".$_POST['Title']."','".$_POST['state']."','',".$currentCAT.",'".$_POST['sub']."', ".$currentDescId.", '".$today."', '".$EXP."','".$_POST['type']."','".$_POST['Price']."','".mysql_real_escape_string(file_get_contents($_FILES['image']['tmp_name']))."')";
$con->query($sql_createAD );

在大.....我添加一篇文章,其中包含信息和每一个....但是当我使用“.mysql_real_escape_string”将img添加到数据库中时,我应该再使用折旧的方法.. ....所以现在我要替换它...但我读到pfo中没有替代方案......但是我真的可以找到它周围的工作.....所以PLZ帮助我找到它! :D

我发现,如果我使用$ con> prepare()进行插入和执行()将其放入数据库中它可以正常工作......但是对我来说......错误我得到的是: SQLSTATE [HY093]:参数号无效:混合命名和位置参数

看看我做过的尝试:

$query = "INSERT INTO `kijilikedb`.`advertise` (`AD_ID`, `AD_NAME`, `REF_STATE`, `REF_USER`, `REF_CAT`, `REF_SUB`, `REF_DESC`, `REG_DATE`, `EXP_DATE`, `AD_TYPE`, `AD_PRICE` , `IMAGE`) VALUES (NULL,'".$_POST['Title']."','".$_POST['state']."','',".$currentCAT.",'".$_POST['sub']."', ".$currentDescId.", '".$today."', '".$EXP."','".$_POST['type']."','".$_POST['Price']."','".file_get_contents($_FILES['image']['tmp_name'])."')";
$preparedQuery = $con->prepare($query);
$preparedQuery->execute();

1 个答案:

答案 0 :(得分:0)

以下是我如何使用带参数的预备语句:

$query = "INSERT INTO kijilikedb.advertise
    SET AD_ID = :ad_id,
        AD_NAME = :ad_name,
        REF_STATE = :ref_state,
        REF_USER = :ref_user,
        REF_CAT = :ref_cat, 
        REF_SUB = :ref_sub,
        REF_DESC = :ref_desc,
        REG_DATE = :reg_date,
        EXP_DATE = :exp_date,
        AD_TYPE = :ad_type,
        AD_PRICE = :ad_price,
        IMAGE = :image";

这使用INSERT的替代语法。它更易于阅读,并且更容易将列名称与查询参数占位符进行匹配。但是这种语法不支持多行插入。

接下来,使用您的值创建一个关联数组。键与上面的参数占位符名称匹配(不需要前导冒号字符)。

使用查询参数时,不能使用任何转义字符串方法(FWIW,PDO::quote()会转义,但也会添加引号。)

$values = array(
    'ad_id' => NULL,
    'ad_name' => $_POST['Title'],
    'ref_state' => $_POST['state'],   
    'ref_user' => '',
    'ref_cat' => $currentCAT, 
    'ref_sub' => $_POST['sub'],
    'ref_desc' => $currentDescId,
    'reg_date' => $today,
    'exp_date' => $EXP,
    'ad_type' => $_POST['type'],
    'ad_price' => $_POST['Price'],
    'image' => file_get_contents($_FILES['image']['tmp_name'])
);

最后,准备/执行是一行简单的两行代码:

$preparedQuery = $con->prepare($query);
$preparedQuery->execute($values);