2013-08-19 106 views
0

我想用PDO(对象)插入mysql-DB条目。在事先误解了PDO之后,我重新创建了这个问题。使用PDO的PHP插入

问题是,没有东西会被添加到数据库,但我没有得到任何异常抛出。 我很确定必须有一个更简单的方法来实现我想要做的事情。但即时通讯只是PHP和SQL初学者..所以任何帮助或建议将不胜感激。

我使用这个代码:

function INSERT($req) { 
try { 
    $db = new PDO('mysql:host=127.0.0.1;dbname=mcqsystem;charset=utf8', 'root', ''); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

    //$values = explode(",", $req); 
    $values = array('question goes here', -1, 'a|b|c|d|e', '01', '0|', '0|', '0|', '0', '2', 'info text', '1', '23.01.2014', '-1', '28.12.2013 15:04:03'); 

    $stmt = $db->prepare("INSERT INTO _mcqs (`Question`, `PictureID`, `PossibleAnswers`, `CorrectAnswers`, `Categories`, `Courses`, `Tags`, `Variant`, `Flag`, `Information`, `Locked`, `ExamDate`, `AddedBy`, `AddedWhen`) VALUES(:question, :pictureid, :possibleanswers, :correctanswers, :categories, :courses, :tags, :variant, :flag, :information, :locked, :examdate, :addedby, :addedwhen)"); 
    $stmt->bindParam(':question', $values(0), PDO::PARAM_STR); 
    $stmt->bindParam(':pictureid', $values(1), PDO::PARAM_INT); 
    $stmt->bindParam(':possibleanswers', $values(2), PDO::PARAM_STR); 
    $stmt->bindParam(':correctanswers', $values(3), PDO::PARAM_STR); 
    $stmt->bindParam(':categories', $values(4), PDO::PARAM_STR); 
    $stmt->bindParam(':courses', $values(5), PDO::PARAM_STR); 
    $stmt->bindParam(':tags', $values(6), PDO::PARAM_STR); 
    $stmt->bindParam(':variant', $values(7), PDO::PARAM_STR); 
    $stmt->bindParam(':flag', $values(8), PDO::PARAM_INT); 
    $stmt->bindParam(':information', $values(9), PDO::PARAM_STR); 
    $stmt->bindParam(':locked', $values(10), PDO::PARAM_BOOL); 
    $stmt->bindParam(':examdate', $values(11), PDO::PARAM_STR); 
    $stmt->bindParam(':addedby', $values(12), PDO::PARAM_STR); 
    $stmt->bindParam(':addedwhen', $values(13), PDO::PARAM_STR); 

    $stmt->execute(); 

} catch(PDOException $ex) { 
    echo "ERROR @ INSERT: " . $ex->getMessage(); 
    some_logging_function($ex->getMessage()); 
} 
} 
+1

您正在取消引用阵列中的项目错误。你应该使用方括号:'$ values [0]'。 –

回答

1

这里是正确的做法:

function INSERT($db) 
{ 
    $values = array('question goes here', -1, 'a|b|c|d|e', '01', '0|', '0|', '0|', '0', '2', 'info text', '1', '23.01.2014', '-1', '28.12.2013 15:04:03'); 
    $stmt = $db->prepare("INSERT INTO _mcqs VALUES(?,?,?,?)"); // adjust number of ?s 
    $stmt->execute($values); 
} 
  • 没有在每一个功能连接,但使用的唯一连接的所有应用程序
  • 不要使用try..catch来记录错误 - PHP会更好地处理它
  • 不用担心列表al L时域
  • 没有每个值分别,如果你已经有一个数组
+0

千谢谢,很感激! – drumbun

0

你不使用()访问数组项绑定,你必须使用[]

$stmt->bindParam(':question', $values(0), PDO::PARAM_STR); // $values(0) is wrong 

正确的方法是

$stmt->bindParam(':question', $values[0], PDO::PARAM_STR); 
            ^^ 

这适用于所有的语句,不只是一个。

+0

我们可以使用'()'作为PHP版本5.5的数组。 :) –

+0

这很好,谢谢你的信息。回答站删除然后:) –

+1

@YogeshSuthar对不起,但我接受了你的评论,并删除了我的答案,认为你注意到是有效的,我被问到如果我做了一些研究,当我做了,我发现你的评论是无效,我的原始答案没有错。即使在PHP 5.5中,你也不能使用'()'访问数组项,你可以将任何资源链接到我? –