我正在为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语句,而不是硬编码值。
答案 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