在一个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); 
    } 
} 

它说无效的查询。插入语句中的列已按正确顺序排列。谁能帮我?

+1

您的查询是对SQL注入攻击开放的。看看http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php看看如何安全地做你的查询。 – 2014-09-29 17:12:43

+0

我知道。即时通讯首先尝试构建其功能。请坚持提问 – Gokigooooks 2014-09-29 17:18:39

您必须指定要插入的列 -

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不给它,因为你不使用通配符查找其他元素的机会。

+0

我必须指定吗?我插入的值与我创建表时的顺序相同。 – Gokigooooks 2014-09-29 16:21:08

+0

是的,MySQL需要你指定。 – 2014-09-29 16:21:31

+0

添加了列说明,但无济于事。我也试过把百分号放在'doctorName'这样的'%$ docName%''仍然不起作用的地方。 – Gokigooooks 2014-09-29 16:25:10