我需要帮助弄清楚为什么这个查询不起作用。
<?php
session_start();
require 'DB.php';
$message = "Error";
if (!empty($_POST['statement1'])) {
$sql = "INSERT INTO test2 (first, middle, last, statement1) VALUES ('{$_SESSION['first']}','{$_SESSION['middle']}','{$_SESSION['last']}', :statement1 )";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':statement1', $_POST['statement1']);
if ($stmt->execute()) {
header("Location: Login.php");
} else {
echo $message;
}
}
?>
我之前用另一个数据库测试了这个,我刚刚插入了statement1值,它运行正常。现在我已经添加了会话变量,代码没有完成插入。我该怎么办?
答案 0 :(得分:1)
如我所见,您可能更愿意这样做:
<?php
session_start();
require 'DB.php';
$message = "Error";
if (
!isset(
$_SESSION,
$_SESSION['first'],
$_SESSION['middle'],
$_SESSION['last']
) ||
empty($_SESSION['first']) ||
empty($_SESSION['middle']) ||
empty($_SESSION['last'])
) {
echo 'No valid session...'.PHP_EOL;
} elseif (
isset($_POST['statement1']) &&
!empty($_POST['statement1'])
) {
$stmt = $conn->prepare(
'INSERT INTO test2 (
first,
middle,
last,
statement1
) VALUES (
:first,
:middle,
:last,
:statement1
)'
);
$stmt->bindParam(':first', $_SESSION['first']);
$stmt->bindParam(':middle', $_SESSION['middle']);
$stmt->bindParam(':last', $_SESSION['last']);
$stmt->bindParam(':statement1', $_SESSION['statement1']);
if ($stmt->execute()) {
header("Location: Login.php");
} else {
echo $message;
}
}
?>
假设您将拥有$_SESSION['first']
,$_SESSION['middle']
,$_SESSION['last']
和$_POST['statement1']
个变量,并且假设$conn
因页面DB.php
而创建No valid session...
}
如果此代码打印$_SESSION
,则您遇到first
个变量的问题:
middle
数组中没有现有last
,$_SESSION
或<?php
// be sure session_start() is used before to edit $_SESSION variable
session_start();
$_SESSION['first'] = 'Foo';
$_SESSION['middle'] = 'Bar';
$_SESSION['last'] = 'Foobar';
索引如果是这样,您可能需要在执行此代码后尝试:
session_start()
刷新! :)(不包括打开的PHP标记,它仅用于指定其他用户此代码是PHP)
您可以在?>
之后或关闭Error
PHP标记之前插入此代码。
如果它正在打印您的默认<?php
var_dump($conn->errorInfo());
消息,那么您的查询可能有问题:您可能正在尝试插入与您的数据库中的类型不匹配的值。为了弄清楚发生了什么,你可能想要使用:
$length = count($array_new);
if(empty($array_new))
echo("Array is empty");
else
echo("Array is not empty");
echo("\n");
print_r($array_new);
echo("Length of array is".$length);
查询执行后。
也检查错误。
我希望这会对你有所帮助!