Проблем с заявка oop

pro12

Registered
Това ми е кода и по този начин работи, но не ми върши работа.
PHP:
$sqls  = ("INSERT INTO $tname ($val) VALUES($vas)") ;
	  $stmt = $this->conn->prepare($sqls); 
      if ($stmt ) { 
       $stmt->bind_param('s', $f); 
       $stmt->execute();

За да ми върши работа кода този ред трябва да е така
PHP:
       $stmt->bind_param('$w', $f);

$ins->insert("alb", "name, kod", "?, ?", "ss", "$titles, $t");
Дава ми това
Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables
Как да оправя проблема?
 
Честно казано изобщо не ти се разбира какво искаш да направиш, но е нормално да ти дава грешка при положение че си го написал грешно :) .
Ще се опитам да обясня. Първият параметър в bind_param, са букви i, d, s, b, те оказват какъв ще е типа на втория параметър value. Буквата i = integer, d = double, s = string, b = blob. Ако приемем че искаш да добавиш две неща, например $name и $email то bind_param би изглеждал така.

bind_param('ss', $name, $email);
 
Искам да подавам в bind_param буквите и стоитостите чрез две променливи но нещо не ми се получава.
 
Скивай сега, колегата ти е казал какви букви очаква функцията за първи параметър. А ти даваш като стринг '$w' тази променлива МОЖЕ и да съществува, но не отговаря на буквите, които може да се сложат. Съответно пробвай БЕЗ кавичките, за да е ясно на функцията, че това е променлива СЪС стринг, а не стринг, в който има променлива.

PHP:
    $stmt->bind_param($w, $f);

Като пак казвам, задължително в тази променлива трябва да фигурират тези БУКВИ или флагове или както ги наричаш - не може да е празна променлива, иначе пак ще даде грешка.

Ако пак не става това, което искаш - вариантите са 2 .. или не знаеш какво искаш или имаш някъде другаде грешка. И в двата варианта без да видим пълната структура на класа няма как да ти помогнем :) :idea: :?:
 
Както е казал колегата, можеш да пробваш $w без да го слагаш в кавички, но според мен няма да се получи защото, функцията очаква стринг а той трябва да е в кавички. Вариантът е да ескейпнеш кавичките. Трябва да стане така.
Код:
$w = '\'s\'';
$stmt->bind_param($w, $f);

Не знам каква ти е целта, но според мен това е безмислено и е излишна хамалогия.
 
Хора, нещо сте се разсеяли :Д

PHP:
$sqls  = ("INSERT INTO $tname ($val) VALUES($vas)") ;
Тия променливи се интерполират веднага, т.е. в $sqls променливата ще стои такъв стринг:

PHP:
"INSERT INTO mytable (column1) VALUES(value1)"
(примерно, а и изобщо не е сигурно че в $tname и $val стоят чисти стойности)
А вътре няма никакви параметри за bindване :D

Идеята на биндването е да подадеш заявка в чист вид, т.е. hard-coded стринг, в който няма никакви динамични променливи (тавтология - динамични променливи, ама трябва да се подчертае).

към pro12: Първо погледни примерите в документацията, пък тогава си пиши твои заявка, за да знаеш поне за какво иде реч: http://php.net/manual/en/mysqli-stmt.bind-param.php#example-1901
 
Това което искам е нещо подобна на това реших да пробвам кода. Но не работи

Warning: Parameter 3 to mysqli_stmt_bind_param() expected to be a reference, value given in
Warning: mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given in
 
pro12 каза:
Това което искам е нещо подобна на това реших да пробвам кода. Но не работи

Warning: Parameter 3 to mysqli_stmt_bind_param() expected to be a reference, value given in
Warning: mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given in
Не работи, защото в стринга на заявката нямаш места (placeholderи), в които да се заместят твоите стойности. Ти директно си заместил със стойностите на твоите променливи:

[sql]INSERT INTO table (col1) VALUES ($не–слагай–променливи–вътре–в–заявката[/sql]

Вместо променливи слагаш въпросително:

[sql]INSERT INTO table (col1) VALUES (?)[/sql]

Които после ще се заместят с твоите стойности.
 

Back
Горе