我正在尝试调整我的代码,该代码在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 /> ";
}
}
请使用 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);
}
我发现,问题是双引号之前的单引号。它似乎在只有这样的双引号的情况下工作得很好:
if ( mysqli_stmt_prepare( $stmt , "UPDATE ".$_SESSION['tab_from_month_year']." SET ".$_SESSION['roomtype_x']." = ".$_SESSION['roomtype_x']." + ? WHERE day = ?"))
如果这是您需要选择数据库的完整代码,则当前该语句正在发送到服务器,而不是发送到任何数据库,因此您不会收到任何错误。您应该使用:
mysqli_select_db("You database goes here");