标签: sqlbindparameter

PDO为INSERT和ON DUPLICATE KEY UPDATE准备了带有命名占位符的语句

我想将PDO INSERT和UPDATE准备好的语句切换到INSERT和ON DUPLICATE KEY UPDATE,因为我认为它比我目前正在做的更有效率,但是我在找出正确的语法时遇到了麻烦.与命名占位符和bindParam一起使用.

我在SO上发现了几个类似的问题,但我是PDO的新手,无法根据我的标准成功调整代码.这是我尝试过的,但它不起作用(它不插入或更新):

try { 
  $stmt = $conn->prepare('INSERT INTO customer_info (user_id, fname, lname) VALUES(:user_id, :fname, :lname)'          
 'ON DUPLICATE KEY UPDATE customer_info SET fname= :fname, 
                                            lname= :lname   
                                            WHERE user_id = :user_id'); 
  $stmt->bindParam(':user_id', $user_id);  
  $stmt->bindParam(':fname', $_POST['fname'], PDO::PARAM_STR);
  $stmt->bindParam(':lname', $_POST['lname'], PDO::PARAM_STR);      
  $stmt->execute();
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码的简化版本(我有几个查询,每个查询有20-50个字段).我当前正在更新并检查更新的行数是否大于0,如果没有则运行Insert,并且每个查询都有自己的bindParam语句集.

php pdo prepared-statement sqlbindparameter on-duplicate-key

10
推荐指数
2
解决办法
2万
查看次数

mysqli_stmt :: bind_param():类型定义字符串中的元素数与绑定变量数不匹配

所以我有这个巨大的头痛诱导查询,我需要执行涉及65个表单输入需要使用mysqli预处理语句注入数据库.

我遇到的问题是它说我试图调用的变量bind_param#与我正在使用的"s"的#不匹配.我数了十几次,不知道我在哪里错了.有65个变量,65个"s".

谁能看到我失踪的东西?或者我可能以错误的方式使用bind_param方法?

// Preparing our query statement via mysqli which will auto-escape all bad characters to prevent injection
$query3 = 'INSERT INTO datashep_AMS.COMPLETE_APPLICATIONS (
    project_name,
    status,
    funding_requested,
    project_title,
    program,
    county,
    parish,
    name_of_watercourse,
    which_is_a_tributary_of,
    name_of_applicant,
    contact_person_or_project_supervisor,
    relationship_to_organization,
    business_phone,
    home_phone,
    email,
    signature_of_thesis_or_study_supervisor,
    mailing_address,
    postal_code,
    website,
    mailing_address_for_payment,
    hst_registration_no,
    total_cost_dollar,
    total_cost_percent,
    dollar_amount_requested_from_nbwtf,
    percent_amount_requested_from_nbwtf,
    descriptive_summary,
    background_of_organization,
    mandate,
    years_in_existence,
    membership,
    accomplishments,
    previous_project_name,
    previous_project_number,
    previous_project_amount_received_from_nbwtf,
    summary_of_activities,
    summary_of_Results,
    project_title_2,
    reason_and_or_purpose,
    objectives,
    project_description,
    methods,
    equipment_and_materials_required,
    personnel_required,
    proposed_start_date,
    proposed_end_date,
    type_of_data_to_be_stored,
    where_will_it_be_housed,
    monitoring,
    short_term_achievement, …
Run Code Online (Sandbox Code Playgroud)

mysql mysqli prepared-statement sqlbindparameter

8
推荐指数
2
解决办法
3万
查看次数

如何使用bind_param在MySQLi中使用MySQL NOW()函数插入记录?

我需要在PHP中使用绑定参数在MySQLi PDO中执行这个mysql查询:

mysql_query("INSERT INTO `posts` (post_name,publish_date) VALUES ($post_name,NOW()) ")
Run Code Online (Sandbox Code Playgroud)

我使用这样的脚本,但它没有正确插入publish_date.

$publish_date = 'NOW()';
$insert = $mysqli->prepare("INSERT INTO posts (post_name,publish_date) VALUES (?,?)");
$insert->bind_param("ss", $post_name $publish_date);
$insert->execute();
Run Code Online (Sandbox Code Playgroud)

它将记录插入到publish_date列中,如下所示:0000-00-00 00:00:00

我该怎么做?提前致谢.

PS:日期列的类型是datatime.

php mysql mysqli sqlbindparameter

7
推荐指数
1
解决办法
3万
查看次数

mysqli bind_param中的NULL类型是什么?

我试图将params绑定到INSERT INTO MySQLi预处理语句,如果该变量存在,否则插入null.然后我知道

type    variable
i   corresponding variable has type integer
d   corresponding variable has type double
s   corresponding variable has type string
b   corresponding variable is a blob and will be sent in packets

但是当我插入一个变量= null时,我如何定义变量的类型?或者我应该定义类型''?

php mysqli sqlbindparameter

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

动态绑定mysqli_stmt参数然后绑定结果(PHP)

我正在尝试动态绑定mysql_stmt参数并在关联数组中获取结果.我在stackoverflow上找到了这篇文章,其中Amber发布了以下代码的答案:

原帖: 如何用准备好的语句制作一个合适的mysqli扩展类?

"假设你实际上想要编写自己的版本(而不是利用其他答案所建议的现有库之一 - 那些也是很好的选择)......

以下是一些您可能会发现有用的功能.第一个允许您将查询的结果绑定到关联数组,第二个允许您传入两个数组,一个是有序的键数组,另一个是这些键的数据的关联数组,并将数据绑定到准备好的声明:"

function stmt_bind_assoc (&$stmt, &$out) {
    $data = mysqli_stmt_result_metadata($stmt);
    $fields = array();
    $out = array();

$fields[0] = $stmt;
$count = 1;

while($field = mysqli_fetch_field($data)) {
    $fields[$count] = &$out[$field->name];
    $count++;
}
call_user_func_array(mysqli_stmt_bind_result, $fields);

}

function stmt_bind_params($stmt, $fields, $data) {
    // Dynamically build up the arguments for bind_param
    $paramstr = '';
    $params = array();
    foreach($fields as $key)
    {
        if(is_float($data[$key]))
            $paramstr .= 'd';
        elseif(is_int($data[$key]))
            $paramstr .= 'i';
        else
            $paramstr .= 's';
        $params[] = $data[$key];
    }
    array_unshift($params, $stmt, …
Run Code Online (Sandbox Code Playgroud)

php dynamic prepared-statement sqlbindparameter

6
推荐指数
2
解决办法
9471
查看次数

在MySQLi上使用bind_param()时,是否需要转义数据以防止SQL注入?

正如标题所说,使用bind_param()时是否必须转义用户输入?还是内部完成?

谢谢.

php mysqli sqlbindparameter

6
推荐指数
2
解决办法
1785
查看次数

使用PDO prepare和bindParam插入DB表

简单来说,有人可以解释我在这里做错了什么 - 我只是试图插入带有prepare和bindParam的数据库,这是在所有字段中插入0和Null.

$sql = $db->prepare("INSERT INTO db_fruit VALUES (id=? ,type=? ,colour=?)");
$sql->bindParam(1, $newId);
$sql->bindParam(2, $type);
$sql->bindParam(3, $colour);
$sql->execute()
Run Code Online (Sandbox Code Playgroud)

顺便说一句:这个方法一直在为UPDATE等工作,但在这种情况下不适用于INSERT

php pdo sqlbindparameter

6
推荐指数
2
解决办法
3万
查看次数

C++ SQLBindParameter

以下是变量的声明:

string strFirstName;
string strLastName;
string strAddress;
string strCity;
string strState;
double dblSalary;
string strGender;
int intAge;
Run Code Online (Sandbox Code Playgroud)

...做一些"cin"语句来获取数据......

retcode = SQLPrepare(StatementHandle, (SQLCHAR *)"INSERT INTO EMPLOYEE ([FirstName], [LastName], [Address], [City], [State], [Salary], [Gender],[Age]) VALUES (?,?,?,?,?,?,?,?)", SQL_NTS);

retcode = SQLBindParameter(StatementHandle, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 50, 0 &strFirstName,0, NULL);

retcode = SQLBindParameter(StatementHandle, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 50, 0, &strLastName,0, NULL);

retcode = SQLBindParameter(StatementHandle, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 30, 0, &strAddress,0, NULL);

retcode = SQLBindParameter(StatementHandle, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 30, 0, &strCity,0, NULL);

retcode …
Run Code Online (Sandbox Code Playgroud)

c++ odbc sqlbindparameter

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

当BindParam中的变量为null时,pdo prepared语句插入DEFAULT

我有这个问题:我正在使用PDO预处理语句....我想BIND变量但是如果变量为NULL则必须在MYSQL中插入字段的DEFAULT VALUE ...

我正在尝试使用IFNULL(:User_Login__Is_Active,DEFAULT),我也尝试过:COALESCE(:User_Login__Is_Active,DEFAULT),相同错误:PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL中有错误句法;

你怎么能这样做?

看这个例子:

        $stmt = $this->pdo->prepare('INSERT INTO user_login
                                        ( User_Login__ID,
                                          User_Login__Is_Active,
                                          User_Login__Created_Date )
                                   VALUES ( 
                                          :User_Login__ID,
                                          IFNULL(:User_Login__Is_Active, DEFAULT),
                                          :User_Login__Created_Date )');


    $stmt->bindParam(':User_Login__ID', $this->User_Login__ID, PDO::PARAM_INT);
    $stmt->bindParam(':User_Login__Is_Active', $this->User_Login__Is_Active, PDO::PARAM_STR, 100);
    $stmt->bindParam(':User_Login__Created_Date', $this->User_Login__Created_Date, PDO::PARAM_STR, 100);


    $this->User_Login__Is_Active = null;
Run Code Online (Sandbox Code Playgroud)

insert sqlbindparameter default-value dbo

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

DBI:bind_param将字符串强制转换为ntext - > nvarchar(max)和ntext不兼容

我有一个关于perl DBI的bind_param的问题.以下SQL工作原理:

my $sth = $dbh->prepare("SELECT id FROM table WHERE id = 'string'");
$sth->execute();
Run Code Online (Sandbox Code Playgroud)

虽然以下不是:

my $sth = $dbh->prepare("SELECT id FROM table WHERE id = ?");
$sth->execute('string');
Run Code Online (Sandbox Code Playgroud)

上次查询导致的错误是[ODBC SQL Server Driver][SQL Server]The data types nvarchar(max) and ntext are incompatible in the equal to operator. (SQL-42000).

似乎是bind_param,被调用execute,将'string'强制转换为ntext.我该如何解决这个问题?

sql perl ntext sqlbindparameter dbi

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