【问题标题】:mysqli update not updating although no errormysqli更新不更新虽然没有错误
【发布时间】:2013-10-01 15:03:06
【问题描述】:

我正在尝试调整在 SELECT 中工作的代码以执行 UPDATE。在这里,没有错误,但它没有更新任何东西,甚至没有进入循环。它应该更新所选日期的房间类型 ($value)。

我回显了所有值以检查它们,它们是正确的。

$bdd = mysqli_connect('localhost', 'root', '', 'webpage')
$roomty = 1;                                                                                        
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
}

foreach ($_SESSION['datesBooked_1_month'] as $key => $value)
{
    $stmt = mysqli_stmt_init($bdd);
    if ( mysqli_stmt_prepare( $stmt , "UPDATE '".$_SESSION['tab_from_month_year']."'
SET '".$_SESSION['roomtype_x']."'='".$_SESSION['roomtype_x']."' + ? WHERE day = ?"))
    {
        mysqli_stmt_bind_param( $stmt ,'is', $roomty , $value );
        mysqli_stmt_execute( $stmt );
        mysqli_stmt_close($stmt);
        echo " Booked !<br /> "; 
    }           
}

【问题讨论】:

  • it even does not even enter the loop then $_SESSION['datesBooked_1_month'] 是空的,因为您显示的代码之外的原因,不是吗?
  • 我注意到第一行缺少;
  • @pekka var_dump($_SESSION['datesBooked_1_month']) 给了我正确的价值观
  • @Sumurai8 是的没错,只是这里少了,没有忘记在我的代码里。

标签: php mysqli sql-update


【解决方案1】:

请用 PHP 的新 MySql 驱动试试下面的代码。

  • 您将引号用于整数值,这是错误的
  • 你用数字命名列吗?这很不舒服。
  • 您确定 $value 是字符串吗?
  • 为什么在 foreach 循环中使用 $key => $value

代码如下:

/* Connect to an ODBC database using driver invocation */
$dsn = 'mysql:dbname=webpage;host=127.0.0.1';
$user = 'root';
$password = 'dbpass'; #put here yor password

try {
    $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
    }

foreach $_SESSION['datesBooked_1_month'] as  $value) {
    #I hope that following variables don't contain space
    $query = "UPDATE " .$_SESSION['tab_from_month_year']; 
    $temp = $_SESSION['roomtype_x'] + $roomty ;
    #you wrote that $value is a string, are you sure?
    $query .= " SET ".$_SESSION['roomtype_x']. "=$temp WHERE day='$value'"   ;
    $dbh->query($query);
    }

【讨论】:

    【解决方案2】:

    我发现问题出在双引号之前的单引号。它似乎只用这样的双引号就可以很好地工作:

    if ( mysqli_stmt_prepare( $stmt ,  "UPDATE ".$_SESSION['tab_from_month_year']." SET  ".$_SESSION['roomtype_x']." = ".$_SESSION['roomtype_x']." + ?  WHERE  day = ?"))
    

    【讨论】:

    • 是的。这确实是“双引号前的单引号”,又是一个需要学习的神奇圣歌。
    • @Your Common Sense 我不确定你的意思,但我说它现在可以正常工作,没有单引号。即:因为我删除了它们。
    • @SunnyOne 如果这是您的答案,请验证它。无论如何,您应该使用 ` ` (反引号)而不是单引号或“nothing”。
    【解决方案3】:

    如果这是您选择数据库所需的完整代码,目前该语句正在发送到服务器而不是任何数据库,因此您不会收到任何错误。你应该使用:

    mysqli_select_db("You database goes here");
    

    【讨论】:

    • 使用 mysqli 连接 MySQL 数据库的语法:$mysqli = new mysqli("localhost", "user", "password", "database");
    • @aliasm2k 我的程序风格不是 OOP
    • 你可以使用 $mysqli = mysqli_connect("mysql9.000webhost.com","a5869705_test","cycling1");然后使用 mysqli_select_db($mysqli, "a5869705_test");
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2016-12-18
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多