在一个MySQL查询中插入一个select语句和php变量
我有类似这样的将表单中的数据插入到我的MySQL表中。我使用select语句插入有效吗?请赐教。在一个MySQL查询中插入一个select语句和php变量
if(isset($_POST['date']) && isset($_POST['docName']) && isset($_POST['docSpec']) && isset($_POST['time']) && isset($_POST['symptoms']))
{
$nameOfUser = $_COOKIE['userlogin'];
$docName = $_POST['docName'];
$date = $_POST['date'];
$symptoms = $_POST['symptoms'];
$time = date('H:i:s',strtotime($_POST['time']));
$id = mt_rand(1000,9999); //generate random appointment id
$insertQuery = "insert into appointment values
($id,(select doctorid from doctors where doctorName like '$docName'),
$date,$symptoms,
(select patientid from patient where patientFName like '$nameOfUser'), $time)";
if(mysqli_query($conn,$insertQuery)===true)
{
echo "<script>alert('success');</script>";
}
else
{
die('Invalid query: ' . mysql_error());
$message .= 'Whole query: ' . $query;
die($message);
}
}
它说无效的查询。插入语句中的列已按正确顺序排列。谁能帮我?
您必须指定要插入的列 -
insert into appointment (col1, col2, col3, ...) values
($id,(select doctorid from doctors where doctorName like '$docName'), $date,$symptoms,(select patientid from patient where patientFName like '$nameOfUser'),$time)";
看起来你有6列。
编辑:这句法可能有助于澄清一些事情 -
$insertQuery = "INSERT INTO `appointment` (`col1`, `col2`, `col3`,`col4`,`col5`,`col6`) ";
$insertQuery .= "VALUES (";
$insertQuery .= "'" . $id . "'";
$insertQuery .= ", '" . "(SELECT `doctorid` FROM `doctors` WHERE `doctorName` LIKE '%" . $docName . "%')" . "'";
$insertQuery .= ", '" . $date . "'";
$insertQuery .= ", '" . $symptoms . "'";
$insertQuery .= ", '" . "(SELECT `patientid` FROM `patient` WHERE `patientName` LIKE '%" . $nameOfUser . "%')" . "'";
$insertQuery .= ", '" . $time . "'";
$insertQuery .= ")";
您还使用LIKE不给它,因为你不使用通配符查找其他元素的机会。
我必须指定吗?我插入的值与我创建表时的顺序相同。 – Gokigooooks 2014-09-29 16:21:08
是的,MySQL需要你指定。 – 2014-09-29 16:21:31
添加了列说明,但无济于事。我也试过把百分号放在'doctorName'这样的'%$ docName%''仍然不起作用的地方。 – Gokigooooks 2014-09-29 16:25:10
您的查询是对SQL注入攻击开放的。看看http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php看看如何安全地做你的查询。 – 2014-09-29 17:12:43
我知道。即时通讯首先尝试构建其功能。请坚持提问 – Gokigooooks 2014-09-29 17:18:39