使用odbc_prepare和odbc_execute在PHP中编写,尝试插入MS SQL。
基本上,我仍然是所有这些的新手,但我熟悉正常(毫无准备)的MySQL和MSSQL查询。我现在正试图使用预备语句,因为它们具有安全价值。这是我的代码:
PHP
//$conn = db connection
//$dbArray = array with sizeof = 26
$stmt = odbc_prepare($conn, 'INSERT INTO W2_contact_us_FORM VALUES (?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$success = odbc_execute($stmt, $dbArray);
if($success) {//success msg} else {//error msg}
另外,我觉得必须有更好的方式而不是列出26?但是,也许没有?谢谢你的帮助!
编辑 - 考虑切换到PDO而不是odbc,所以,如果你更熟悉使用pdo的解决方案,我很满意,因为PDO现在也可以内置到PHP中(希望如此) )。
答案 0 :(得分:1)
您可以使用命名参数,这将使其更容易阅读,但您仍然需要将所有26个放入其中。使用PDO,您将能够执行以下操作:
insert into tableName values (:id, :val1, :val2 ....)
阅读代码要容易得多,并且对其他人来说更有意义。
然后,如果你决定使用PDO路径,你可以一举将所有参数传递给像这样的数组:
$prepared->execute(array(':ID' => $ID, ':val1' => $var1, ':val2' => $var2, ...)))
编辑:我通常在我的代码中使用一些对象,如果你愿意,可以快速复制和粘贴:
类文件:
class mysqlDigitalcog
{
public $con;
private $userName = "yourDBName";
private $passWord = "yourPassword";
private $hostName = "mysql:host=localhost;dbname=example";
// Modify this to your connection
private $isDebug=false;
function __construct()
{
$this->con = new PDO ($this->hostName, $this->userName , $this->passWord);
$this->con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
function __destruct()
{
$this->con = null;
}
}
class myResult
{
private $mysqlAccess;
private $prepared;
public function __construct()
{
$this->mysqlAccess=new mysqlDigitalcog();
}
public function loadData1()
{
$sql="INSERT INTO W2_contact_us_FORM VALUES (:ID, :val1)";
$this->prepared = $this->mysqlAccess->con->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$this->prepared->execute(array(':ID' => 1, ':val1' => 2))
}
public function loadData2($myArray)
{
$sql="INSERT INTO W2_contact_us_FORM VALUES (:ID, :val1)";
$this->prepared = $this->mysqlAccess->con->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$this->prepared->execute($myArray)
}
}
实际页码:
$myResult=new myResult();
$array=array(":ID" => 3, ":val1" => 4);
$myResult->loadData1();
// Data loaded with 1, 2 as per function.
// or alternately
$myResult->loadData2($array);
// Data loaded with array contencts, here 3, 4
现在,我们有一个具有两个函数的对象,一个是在函数本身内生成所有输入,另一个是将值数组传递给函数外部的函数。
答案 1 :(得分:-2)
使用for循环插入'?'
for(int i =0; i<26; i++)
{
}