2017-02-04 12 views
0

Я могу вставлять и выбирать из базы данных mysql без каких-либо проблем, но не в состоянии обновлять записи.инструкция по обновлению не работает (регулярный оператор, а также подготовленный оператор)

Первоначально я использовал mysqli_query без каких-либо результатов или ошибок. Позже я попробовал подготовленное заявление безрезультатно.

Sharing мой код здесь:

define('DB_SERVER', 'localhost'); 
define('DB_USERNAME', 'xxxx'); 
define('DB_PASSWORD', 'xxxx'); 
define('DB_DATABASE', 'xxxx'); 
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE); 

//the function 
function SaveLineItem() { 
    $sql = "update lineitems set deliverycost=? "; 

    $tdetail = ""; 
    if($_POST['tdetail']){ 
     $sql .= ",tracking_details=?" ; 
     $tdetail = $_POST['tdetail']; 
    } 

    $sql .= " where id=?"; 

    $dc = $_POST['dc']; 
    $lineItemId = $_POST['lineItemId']; 
    echo $sql; 

    $stmt = mysqli_prepare($db, $sql); 
    echo "<br>after prepare statement"; 

    if($tdetail<>""){ 
     mysqli_stmt_bind_param($stmt,"isi",$dc1,$tdetail1,$lineItemId1); 
    }else { 
     mysqli_stmt_bind_param($stmt,"ii",$dc1,$lineItemId1); 
    } 

    echo "<br>after binding"; 

    $dc1 = $dc; 
    if($tdetail<>""){ 
     $tdetail1 = $tdetail; 
     echo "<br>detail param bound"; 
    } 

    $lineItemId1 = $lineItemId; 
    mysqli_stmt_execute($stmt); 

    echo "<br>statement executed"; 
    //header("location:../welcome.php"); 
} 

Выход:

update lineitems set deliverycost=? ,tracking_details=? where id=? 
after prepare statement 
after binding 
detail param bound 
statement executed 

Но по проверке таблицы нет обновлений. Пытаясь со вчерашнего дня, чего мне не хватает?

Обновление: Этот код изначально разрабатывался в Windows, но позже я решил продолжить работу в Ubuntu 16.04. Кажется, в ubuntu даже вставка не работает. Может ли это быть проблемой безопасности, связанной с ubuntu?

+0

использовать 'mysqli_stmt_affected_rows', чтобы проверить количество строк, на которые повлиял ваш оператор обновления. И имейте в виду, что ваш код может не выходить из части запроса, если он выводится правильно. Проверьте, какие параметры передаются и их ценность. Возможно, теперь результаты обновления происходят из-за ошибки в привязке. Скорее всего, вы установите целое число, когда вы должны использовать intval в '$ _POST' целых чисел –

ответ

0

Попробуйте это пожалуйста. У вас есть $dc1 undefined в то время, когда оно используется в mysqli_stmt_bind_param. Для вас $dc1 содержит id обновленной записи. Если это значение равно null, то вы не увидите никаких изменений в базе данных. Запрос выполняется, но он не влияет на какие-либо строки.

define('DB_SERVER', 'localhost'); 
define('DB_USERNAME', 'xxxx'); 
define('DB_PASSWORD', 'xxxx'); 
define('DB_DATABASE', 'xxxx'); 
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE); 

//the function 
function SaveLineItem() { 
    $sql = "update lineitems set deliverycost=? "; 

    $tdetail = ""; 
    if($_POST['tdetail']){ 
     $sql .= ",tracking_details=?" ; 
     $tdetail = $_POST['tdetail']; 
    } 

    $sql .= " where id=?"; 

    $dc = intval($_POST['dc']); 
    $lineItemId = intval($_POST['lineItemId']); 
    echo $sql; 
    $stmt = mysqli_prepare($db, $sql); 
    echo "<br>after prepare statement"; 
    // define $dc1 here since you use it below. If it is undefined could resolve to an error or a wrong query. 
    $dc1 = $dc;  
    if($tdetail<>""){ 
     mysqli_stmt_bind_param($stmt,"isi",$dc1,$tdetail1,$lineItemId1); 
    }else { 
     mysqli_stmt_bind_param($stmt,"ii",$dc1,$lineItemId1); 
    } 

    echo "<br>after binding"; 


    if($tdetail<>""){ 
     $tdetail1 = $tdetail; 
     echo "<br>detail param bound"; 
    } 

    $lineItemId1 = $lineItemId; 
    mysqli_stmt_execute($stmt); 

    echo "<br>statement executed"; 
    mysqli_stmt_close($stmt); 
    echo "<br>statement closed"; 
    //header("location:../welcome.php"); 
} 
0

Попробуйте поместить оператор execute в переменную, а в конце эхо-сигнал, чтобы вы могли увидеть, был ли ваш запрос терпит неудачу или нет.

А затем попробуйте помещать вывод вашего запроса в phpmyadmin, чтобы узнать, есть ли у вас ошибки.

+0

тот же код вставляет и обновляет, как ожидалось, в Windows 10. В последнее время я обновил Ubuntu до 16.04, поэтому я боюсь, что он может быть связан с ним. Добавление тега ubuntu к этой проблеме. –

 Смежные вопросы

  • Нет связанных вопросов^_^