2014-10-23 4 views
-2

я получил дб, что я могу добавить вещи в нем с этим SQL заявления, используя тип PDO подключения ..:Почему я не могу изменить свой старый метод для нового?

$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); 

в большой ..... им добавив статью, содержащую информацию и Everyting .. .. но когда я добавляю img в базу данных im, используя «.mysql_real_escape_string», который является изношенным методом, который я должен использовать больше ...... поэтому теперь я хочу его заменить ... но я читаю, что нет альтернативы для этого в pfo ...... но im shure я могу найти работу вокруг него ..... так PLZ помочь мне найти его! : D

Я нахожу, что, может быть, если я использую $ conf> prepare() для вставки и execute() для размещения его в db, он может работать ... но в самом деле для меня ..... Я получаю ошибку, когда я делаю это: 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

Вы должны прочитать учебник о PDO и попытаться понять основные концепции. – JJJ

+1

* «но я читаю, что альтернативы нет» * - Альтернатива [** подготовленные заявления **] (http://php.net/pdo.prepared-statements). –

+1

Этот вопрос выглядит не по теме, поскольку он не читает документы на PDO с использованием подготовленных операторов. [** PDO с подготовленными заявлениями **] (http://php.net/pdo.prepared-statements) –

ответ

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. Это немного легче читать и проще сопоставлять имена столбцов с вашими записями параметров запроса. Но этот синтаксис не поддерживает многострочные вставки.

Затем создайте ассоциативный массив с вашими значениями. Ключи соответствуют именам замещающих параметров выше (главный символ двоеточия не требуется).

Когда вы используете параметры запроса, вы не должны использовать какой-либо метод escape-строки (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); 
Смежные вопросы