标签: pdo

PDO更新查询安全吗?

我试图了解和阅读PDO.

我刚刚编写了以下内容并且它工作正常,但我想知道它是否安全,因为我没有逃避任何变量,它是否仍然要求我逃避这些?

// Get Post Variables 
$first_name = $_POST['first_name'];
$surname = $_POST['surname'];
$email_addr = $_POST['email_addr'];
$user_type = $_POST['user_type'];


// query
$sql = "UPDATE users
    SET first_name=?, surname=?, email_addr=?, user_age=?, user_type=?
    WHERE user_id=?";
$q = $conn->prepare($sql);
$q->execute(array($first_name,$surname,$email_addr,$user_age,$user_type,$uid));
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

-4
推荐指数
1
解决办法
136
查看次数

致命错误PDO异常

我正在尝试用pdo更新mysql ...我在一个站点上工作,但它不能在第二个站点上运行.无论我尝试哪种方法,我都会收到跟随错误.

第一个网站是在网上直播的,而这个网站是在wamp ...不确定这是否重要.

(!)致命错误:在第236行的C:\ wamp\www\demo\admin\action\global-settings-css-update.php中(!)PDOException:在C:\ wamp\www\demo\admin\action中第236行的\ global-settings-css-update.php

<?php

    $level = '../../';
    //include($level.'inc/start.php');

      $db_host = "localhost";  
      $db_username = "xxxxx"; 
      $db_pass = "xxxxx"; 
      $db_name = "demo";

      $db = new PDO('mysql:host='.$db_host.';dbname='.$db_name,$db_username,$db_pass, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ));

            $action = $_POST['action'];                 
            $returnto = $_POST['returnto'];

            $global_id = $_POST['global_id'];       
            $rem_base = $_POST['rem_base']; 
            $base_font_size = $_POST['base_font_size']; 
            $base_line_height = $_POST['base_line_height']; 
            $_POST_width = $_POST['_POST_width'];
            $column_gutter = $_POST['column_gutter']; 
            $default_font_family = $_POST['default_font_family']; 
            $default_font_color = $_POST['default_font_color'];
            $default_font_style = $_POST['default_font_style'];
            $default_font_weight = $_POST['default_font_weight'];            
            $primary = $_POST['primary']; 
            $primary_lighter = $_POST['primary_lighter']; 
            $primary_darker = $_POST['primary_darker']; 
            $second_accent …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

-4
推荐指数
1
解决办法
78
查看次数

在缺少的字段中动态插入PDO

我正在PDO用于将数据插入数据库。一切工作都还不错,但是我有点问题。让我以你为例

//Perform a basic insert 

$param contains the fields that must be inserted
$this->insert("user", array("id" => $param['id'], "name" => $param['name']));
Run Code Online (Sandbox Code Playgroud)

现在,此插入可以正常工作,但是假设在param缺少字段的数组中,$name我会得到通知:

未定义索引 name

如何直接传递要插入的字段?在我的数组中,键表示列名称,因此:id, name和值是要插入数据库的内容。

这是我的插入方法:

public function insert($table, $data)
{
    $fieldNames = implode("`, `", array_keys($data));         
    $fieldValues = ":" . implode(", :", array_keys($data));  

    $sth = $this->prepare("INSERT INTO $table (`$fieldNames`)
            VALUES ($fieldValues)");

    // Bind sui valori

    foreach($data as $key => $value)
    {
        $sth->bindValue(":$key", $value);
    }

    return $sth->execute();
}
Run Code Online (Sandbox Code Playgroud)

如何仅插入所需的值而不传递所有字段并出错?

php pdo

-4
推荐指数
1
解决办法
912
查看次数

解析错误:语法错误,意外的',',期望变量(T_VARIABLE)

我在定义函数和从 error_reporting(E_ALL);

有错误 Parse error: syntax error, unexpected ',', expecting variable (T_VARIABLE) in C:\xampp\htdocs\bs4\func.php on line 4

这是我的代码

<?php
error_reporting(E_ALL);
require_once "condb.php";
function noproblem(time,suggest,phone,eat,problem){ // Here is line 4

  $sql="insert into data(time,suggest,phone,eat,problem) values(?,?,?,?,?)";
  $stmt=$cn->prepare($sql);
  $stmt->bindParam("1",time);
  $stmt->bindParam("2",suggest);
  $stmt->bindParam("3",phone);
  $stmt->bindParam("4",eat);
  $stmt->bindParam("5",problem);

  try {
    $stmt->execute();
    echo "ok!";
  } catch (Exception $e) {
    echo $e->getTraceAsString();
  }
}
?>
Run Code Online (Sandbox Code Playgroud)

php pdo php-parse-error

-4
推荐指数
1
解决办法
1万
查看次数

dbo插入php错误

当我尝试提交新创建的表单时出现此错误.db_connect(); 只是一个新的PDO.

$db = db_connect();
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$mail = $_POST['mail'];
$ww = $_POST['ww'];
$naam = $_POST['naam'];
$achternaam = $_POST['achternaam'];
$tussenvoegsel = $_POST['tussenvoegsel'];
$rights = $_POST['rights'];

try{


$statement = $db->prepare("INSERT INTO gebruiker(email, wachtwoord, rol_id,groep_id, voornaam, achternaam, tussenvoegsel)
    VALUES(:mail, :ww, :rolid, :groepid,:voornaam,:achternaam,:achternaam,:tussenvoegsel)");
$statement->execute(array(
    "mail" => "$mail",
    "ww" => "$ww",
    "rolid" => "$rights",
    "groepid" => "1",
    "voornaam" => "$naam",
    "achternaam"=>"$achternaam",
    "tussenvoegsel" =>"$tussenvoegsel"));
}

catch(PDOException $e) {
        echo $e->getMessage();
    }}
Run Code Online (Sandbox Code Playgroud)

这是错误

SQLSTATE [21S01]:插入值列表与列列表不匹配:1136列计数与第1行的值计数不匹配

php mysql pdo

-4
推荐指数
1
解决办法
60
查看次数

PDO SQLSTATE [42S22]:找不到列

在有人问我之前......是的,这个专栏肯定存在.

以下查询在CLI或PHPMyAdmin中工作正常,但在PDO中执行时它不起作用,它表示该列不存在.

SELECT      `draw_config`.`draw_config_id`, `draw_config`.`time_zone`
FROM        `draw_config`
Run Code Online (Sandbox Code Playgroud)

完全错误:

SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'draw_config.draw_config_id'

我最近升级了我的本地开发环境,包括PHP和MySQL,所以毫无疑问这就是问题所在.

有没有人有这个错误或错误的更多信息/解决方案?

我在Windows 8上运行以下内容......

PHP版本:

PHP 5.5.6 (cli) (built: Nov 12 2013 11:33:44) VC11
Run Code Online (Sandbox Code Playgroud)

MySQL版本:

+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.6.14                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| version                 | 5.6.14                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Win64                        |
+-------------------------+------------------------------+
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

-5
推荐指数
1
解决办法
1821
查看次数

PHP/PDO:SQl查找包含字符串值的行

我尝试发出一个请求来查找包含特定字符串值的行.

这是我的代码的摘录:

// Getting motscles value
        $motscles = $_POST['motscles'];

        // Prepare a second SQL request to get all annonces posted by the user
        $result2=$connexion->prepare("select * from annonces where titre LIKE = '%".$motscles."%' ");
Run Code Online (Sandbox Code Playgroud)

我没有结果,我认为我的要求很糟糕..

php mysql sql pdo

-5
推荐指数
1
解决办法
1044
查看次数

不推荐使用:mysql_connect():不推荐使用mysql扩展,将来会删除它:使用mysqli或PDO

我是PHP的新手,我试图连接到我的数据库,有些你管视频的帮助,但我得到这个错误

不推荐使用:mysql_connect():不推荐使用mysql扩展,将来会删除它:在第7行的C:\ wamp\www\db.php中使用mysqli或PDO

请帮助..我很困惑!!!

php mysql mysqli pdo

-5
推荐指数
1
解决办法
2万
查看次数

如何将此PDO代码转换为MySQLi?

我对PHP和MySQL还是很陌生,我尝试学习如何将代码从PDO更改为MySQLi。它与我在网上找到的登录系统有关的“记住我”功能以及一个安全令牌和标识符。我想学习并了解如何将代码从PDO更改为MySQLi。我知道在MySQLi中有一条创建和准备语句,我也必须绑定参数并执行。但是在这种情况下,我还是不知道如何开始。

$pdo = new PDO('mysql:host=localhost;dbname=dbname', 'root', '');
if (!isset($_SESSION['id']) && isset($_COOKIE['identifier']) &&
isset($_COOKIE['securitytoken'])) {
    $identifier = $_COOKIE['identifier'];
    $securitytoken = $_COOKIE['securitytoken'];

    $statement = $pdo->prepare("SELECT * FROM securitytokens WHERE identifier = ?");
    $result = $statement->execute(array($identifier));
    $securitytoken_row = $statement->fetch();

    if (sha1($securitytoken) !== $securitytoken_row['securitytoken']) {
        die('Maybe a stolen securitytoken.');
    } else {
        //Token was correct
        //Set an new token
        $neuer_securitytoken = random_string();
        $insert = $pdo->prepare("UPDATE securitytokens SET securitytoken = :securitytoken WHERE identifier = :identifier");
        $insert->execute(array('securitytoken' => sha1($neuer_securitytoken), 'identifier' => $identifier));
        setcookie("identifier", $identifier, time() + …
Run Code Online (Sandbox Code Playgroud)

php mysqli pdo

-5
推荐指数
1
解决办法
62
查看次数

使用单例模式的PDO连接类

<?php

//db connection class using singleton pattern
class dbConn {
    //variable to hold connection object.
    protected static $db;

    //private construct – class cannot be instatiated externally.
    private function __construct()
    {

        try { // assign PDO object to db variable
            self::$db = new PDO('mysql:host=localhost;dbname=cricket', 'root', '');
            setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) { //Output error – would normally log this to error file rather than output to user.
            echo "Connection Error: " . $e->getMessage();
        }
    }

    // get connection function. Static …
Run Code Online (Sandbox Code Playgroud)

php mysql singleton pdo

-6
推荐指数
1
解决办法
7971
查看次数

使用pdo获取列中的值的总和

我想得到表all_nums中名为numbers的列中的所有值的总和,并将其存储到变量中.我在下面试过,但它找到了行数.

$dbh = new PDO('mysql:host='. $host .';dbname='.$db_name, $db_username, $db_password);
$STH_SELECT = $dbh->query("SELECT count(*) FROM all_nums");
$sof = $STH_SELECT->fetchColumn(); 
Run Code Online (Sandbox Code Playgroud)

php mysql sql database pdo

-7
推荐指数
1
解决办法
6249
查看次数

如何使用PDO通过此语句获取数据并仅检索第一列?

正如标题所述,我只能抓取id列,我得到其他人的Undefined索引错误.

我的代码:

if(isset($_SESSION['id'])) {
    $presh = $_SESSION['id'];
    $stmt = $pdo->prepare("SELECT id FROM users WHERE id = :id");
    $id = $presh;
    $stmt->execute(array(':id'=>$id));
    $accountinfo = $stmt->fetch(PDO::FETCH_ASSOC);
}
Run Code Online (Sandbox Code Playgroud)

稍后在我的代码中我引用它:

Karma <span id="kcurrent"><?php echo $accountinfo["karmacurrent"]; ?></span> | <span id="ktotal"><?php echo $accountinfo["karmatotal"]; ?></span>
Run Code Online (Sandbox Code Playgroud)

行确实存在并且它们已经填满,我做错了什么?

php mysql pdo fetch

-25
推荐指数
1
解决办法
549
查看次数

像'LIMIT 0,50'这样的字符串可以和命名参数一起使用吗?

我正在更新一些旧的PHP代码并遇到了一个我不完全理解的问题.在mysql_*函数的旧时代,您可以在SQL查询中包含一个变量,如:

$query = "SELECT * FROM table $limit";
Run Code Online (Sandbox Code Playgroud)

哪里$limit = "LIMIT 0,50";.因此完整的查询是

$query = "SELECT * FROM table LIMIT 0,50";
Run Code Online (Sandbox Code Playgroud)

一切都很好.但是,对于PDO预处理语句和命名参数,除非您分解限制语句,否则这种类型的简单替换似乎不可能.例如:

$stmt = $conn->prepare('SELECT * FROM table :myLimit');
$stmt->execute(array(':myLimit'=>' LIMIT 0,50'));
Run Code Online (Sandbox Code Playgroud)

导致错误:

错误:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误; 检查与您的MySQL服务器版本对应的手册,以便在"?"附近使用正确的语法 在第1行

(在旁注上我发现错误完全没用,因为没有使用问号 - 但回到手头的问题)

但是,如果我将该查询更改为以下内容,以便进一步细分LIMIT:

$stmt = $conn->prepare('SELECT * FROM table LIMIT :start,:end ');
$stmt->execute(array(':start'=>0,':end'=>50));
Run Code Online (Sandbox Code Playgroud)

它很棒.

  • 那么为什么不使用:myLimit作为命名参数和 array(':myLimit'=>' LIMIT 0,50')值的工作呢?
  • 使用命名参数有哪些规则,它们与旧的mysql_*函数可以使用的SQL字符串中的简单变量替换有何不同?

php.net上的PDO页面有些含糊不清,当涉及到什么可以和不能用作命名参数时,我正在寻找比我发现的更深入的东西:

  • 您必须为要传递给语句的每个值包含唯一的参数标记
  • 您不能在预准备语句中两次使用同名的命名参数标记.
  • 您不能将多个值绑定到单个命名参数,例如,SQL语句的IN()子句.

我目前正在使用PHP 5.1.6

php mysql pdo prepared-statement named-parameters

-26
推荐指数
1
解决办法
1295
查看次数