如何在此oci_parse语句中插入变量

时间:2019-07-19 20:15:29

标签: php html mysql sql

我正在为Web表单创建PHP代码,该Web表单在提交后发送自动电子邮件,我想将所有表单输入都添加到Oracle数据库中。

如何将变量添加到oci_parse语句中?例如,如何将我的$ name var传递给此语句?

我尝试研究文档以及其他代码。

<?php


if (!empty($name) || !empty($studentemail) || !empty($programofstudy) || !empty($enrolledinanonlineprogram)) {

//    create new cnnection (Table name is "register" for sql database)

$db = oci_new_connect("someuser", "somepassword", "somehost");

   if (!$db) {
     echo "connection error check your server config";
   }
   else {
     echo "Connection sucessful";
   }

   $name = $_POST['name'];
   $studentemail = $_POST['studentemail'];
   $programofstudy = $_POST['programofstudy'];
   $enrolledinanonlineprogram = $_POST['enrolledinanonlineprogram'];
   $bodytext = $_POST['bodytext'];

$stid = oci_parse($db, 'SELECT * FROM register');

$stid = oci_parse($db, 'INSERT INTO register (column1) VALUES (12345)');

oci_execute($stid);

echo "we inserted 12345";

   }
?>

代码有效,并且将“ 12345”插入数据库的表中,但是我想将一个变量传递给oci_parse语句,而不是硬编码值。

2 个答案:

答案 0 :(得分:0)

$stid = oci_parse($db, 'INSERT INTO register (column1) VALUES ('.$variable.')');

OR

$stid = oci_parse($db, "INSERT INTO register (column1) VALUES ($variable)");
//notice the double quotes

如果是数组或对象

$stid = oci_parse($db, 'INSERT INTO register (column1) VALUES ('.json_encode($variable).')');

答案 1 :(得分:0)

请注意SQL注入,请不要将值“按原样”附加到SQL代码中。

想象一下情况

$stid = oci_parse($db, 
  "UPDATE my_password_table SET password = '$user_input_password' WHERE login = '$user_input_login'");

当用户在$ user_input_login字段中输入' or 1 = 1 or '' = '之类的内容时,它将更新所有密码。

不信任您从用户那里获得的任何数据。即使您知道用户无法在该字段中键入该文本。

因此,向查询中添加值的错误少方法是将所有单引号替换为双引号

$stid = oci_parse($db, 
  'INSERT INTO register (email) VALUES (' 
     . str_replace("'", "''", $studentemail) . ' )');

但是正确的方法是使用[oci_bind_by_name][1]函数

首先,通过在名称前添加:来声明绑定变量。接下来,将变量绑定到该名称

$stid = oci_parse($db, 'INSERT INTO register (email) VALUES (:EMAIL)');
oci_bind_array_by_name($stid, 'EMAIL', $studentemail);
oci_execute($stid);

注意,放置字符串变量不需要引号。

此外,请注意:此函数未分配值。它在查询中的php变量和名称之间建立了链接。执行oci_execute时将获取变量的值。这意味着如果在绑定变量之后但在执行查询之前更新该变量,则将应用新值

$stid = oci_parse($db, 'INSERT INTO register (email) VALUES (:EMAIL)');
$studentemal = 'ABC';
oci_bind_array_by_name($stid, 'EMAIL', $studentemail);
$studentemal = 'XYZ';
oci_execute($stid); // XYZ value is inserted